SAM LEVATICH: Velkommen til seksjon for denne uken. Jeg er ikke Andi. Andi har blitt syk denne dagen, og jeg har liksom kalt i siste øyeblikk å overta. Det er influensasesongen, så sørg for at du holder seg rusfri, vaske hendene, og spise sunt slik at du også, er ikke sengeliggende. Men uten videre larm, la oss komme i gang. I dag skal vi snakke om PHP litt bit-- hvordan PHP er relatert til HTML, hvor det vedrører CSS, og noen av web ting du gjorde på den siste oppgaven. Vi kommer til å snakke litt om SQL og hvordan du kan jobbe med databaser, som er en ganske viktig del av P satt 8-- P satt 7. P satt 7. Og så skal vi snakke litt litt om hvordan view kontrollere fungerer og hvorfor det er en filosofi bak noen moderne nettsider og annerledes design. Ganske mye mye typer apps og programmer du kan sende bruker denne modellen view controller rammeverk, at du skal bruke i P satt 7, så jeg skal snakke litt om hvorfor det er blitt populært, hvorfor det er viktig og hyggelig. Og så skal jeg endelig gå videre til noen tips om å takle P satt 7. Og hvis vi har tid igjen på slutten, vi kan faktisk gjøre noen jobbe med det sammen. Så, PHP. Faktisk har du kanskje lagt merke til dette-- du egentlig ikke trenger å dykke inn it-- men P satt seks hadde noen PHP kode som var på gang. Og fordi PHP er et C-lignende språk, PHP, i motsetning til HTML og CSS, er et programmeringsspråk, mens HTML og CSS er statiske. De er kodespråk som omhandler med stil og visuell layout. PHP er the real deal. PHP har løkker, det har conditions-- alle at ting som er gøy om C. Den har et par ting som er litt litt bedre enn C, som vi vil se, men jeg tror den enkleste måten å snakke om PHP er bare å dykke i. Så jeg kommer til å gå rett inn i IDE på dette punktet. Det første vi skal å gjøre er å se egentlig en liten bit på noen av PHP-kode som var i P satt seks. Så måten vi gjør at-- før, slik at vi fikk kjøre serveren for apparatet var at vi måtte type-- enten bruke implementeringen eller personalet implementering av server.c ved å gå inn i katalogen og kjører server.c med enten ingen arguments-- så bare kalle det på lokale verten, som er det du sannsynligvis gjorde det meste av tid-- og deretter fôre det en directory-- med som å bruke som sin rot hvor nettsiden ville være drevet, i utgangspunktet. Denne uken for P satt 7, som stor som vår kode for server.c er, det er folk som allerede har skrevet disse fine tingene over på CS50 som har en liten bit mer funksjonalitet, en server program som er i stand for å håndtere en litt mer av de vanskelighetene som vi vil se i både P satt 7 og P satt åtte. Og måten at du starter opp Serveren er ved bare å skrive, "apache50." Og før du gjør noe, du vil være sikker at Apache 50 er ikke allerede kjører som det er på min maskin, som jeg gjorde for å teste den. Og du gjør det ved å ringe apache50. Stoppe, og du vil se at det hindrer webserveren, hvis du kan se det på bunnen av terminalen vinduet. Og da bare for å starte, vi er kommer til å kalle "apache50 starte." Og så skal vi å mate den en katalog. Nå, fordi vi ønsker å se på noen av P satt 6-kode at vi hadde gjennomført, jeg faktisk kopiert litt av P satt seks kode inn i min egen mappe, som du kan se til venstre der. Det kalles "SeCtIoN8" med store bokstaver fordi jeg er så spent å bli live-streamet i dag. Så hvis vi kjører dette, bør det alt fungerer ganske effektivt. Den sier, OK, er vår side nå tilgjengelig på adressen til IDE, utgangspunktet, som er hva du brukte akkurat som det var i P satt 7-- P satt seks. Alle mine indekser er én indeksen i dag. Så vi kan gå til den adresse, hvis du vil huske, bare ved å klikke på denne lille -knappen øverst til høyre. Og du vil huske denne koden, som skjedde da du gikk inn hello.php. Og hva koden er utformet for å gjør er når du har skrevet inn et navn her-- hvis du sier Sam fordi det er min name-- og jeg klikker si hei, når vi gikk til neste side, det navnet skulle bli vist. Det vil si, "Hei, Sam" eller "Hei," det navnet du legger i det, selv om vi gikk til en helt ny nettside. Og dette er den typen ting at PHP kan gjøre for deg. PHP er i stand til å overføre data mellom to nettsider. Dette er en helt annen side. Du vil se tittelen er "hallo" her. Faktisk har de samme tittel, men jeg lover de er forskjellige web sider hvis vi ser på kilden. Og du kan passere data som er inn i dette tekstfeltet du sender det til neste side som blir kalt opp, og deretter at data er i stand til å være der i sin nåværende form. Nå har vi ennå ikke har implementert dette selv, noe som er det vi kommer til å gjøre akkurat nå for å liksom få en smak for hvordan PHP fungerer, men nøkkelen ideen er at PHP-- du kan liksom tenke på det som en funksjon. Noe som PHP kan la deg vet er at det kan ta parametere at du innspill til en HTML-side gjennom bruk av PHP og former, og det kan passere dem som parametere til neste side at det lastes opp. I dette tilfellet, vi laste opp dette side med "Si hei" -knappen. Men for nå, jeg faktisk slettet noe av den koden i hello.php som ble kjørt som faktisk var å vise "hallo, verden "eller" hallo, Sam "eller "Hei," hva var bare inngang. Så for akkurat nå, vi er kommer til å gjøre det, i utgangspunktet. Vi kommer til å gjenskape den og også legge litt mer funksjonalitet, gjøre litt mer med det, se hva PHP er virkelig i stand til. Så først, la oss snakke om denne filen, hello.php. Så hvis vi zoomer inn en Litt bit-- og nå er jeg liksom prøve å bla alle måten around-- der vi går. Du vil se det heter hello.php, men syntaksen til det ser ut som en HTML-fil. Dette er fordi faktiske PHP i denne filen er alle fast mellom disse spørsmålstegn-caret blokker. Alt rett her anses PHP-kode. Og du vil legge merke til at når jeg gjorde en kommentar, vil du se det velkjente to skråstreker. Og hvis du husker, i HTML, hvis jeg skriver en kommentar, det ser noe nærmere dette, noe som er en kommentar i HTML. Så egentlig alt mellom disse to vinkelparenteser Nå er PHP-kode, som er reflektert i det faktum at denne lille kommentaren symbol blir forvandlet til en kommentar. Så hver gang du skriver PHP-kode, selv Hvis det er ingen HTML kode utenfor den, det er alltid kommer til å være omsluttet av disse vinkelparenteser med spørsmålstegn. Du kan liksom tenke på it-- hvordan alle av koden som kjørte i dine C-programmer var vedlagt i en int main, ugyldig klammeparentes, end krøllete brace uttalelse. Og du vil se klammeparentes i PHP, også, men dette er liksom som den viktigste metoden for PHP. Så nå, hvordan kan vi gjøre noe i PHP? Nå er PHP et programmerings språk som er veldig C-aktig, men den opererer på nettet. Så en ting som du immediately-- én av de første tingene du virkelig gjorde med C ble du skrevet ting ut, ikke sant? Så i C vi gjorde det med en printf funksjon. Vi ga det en streng, sannsynligvis med en ny linje, og da vi avsluttet det med et semikolon. Så den måten at vi kommer til å gjøre det i PHP-- fordi det er ikke helt printf. Det er en liten bit av forskjellig syntaks. Måten vi skrive ting ut i PHP er vi sier, "echo Hei" eller "echo" noen ord. Og som har den virkning av å gjøre printf med en streng, "hallo". Og det legger den nye linjen til den. Så la oss nå gjøre sure-- Jeg skal zoome ut igjen litt bit-- La oss sørge for at at koden fungerer fordi det kan meget godt være en feil i denne koden at vi blir nødt til å takle. Slik at serveren kjører allerede. Så hvis vi rulle tilbake ned til bunnen, yup, er serveren fortsatt kjører. Så hvis vi bare trykk på denne litt rett her-- welcome-- vi bør get-- stor. Vi fortsatt har den familiar "Si hei" dialog, men når jeg skriver inn "hei," vi får se at teksten "hei" var faktisk skrives ut, som er nøyaktig som vi forventet fordi ekko i PHP er akkurat som en printf uttalelse. Så tilbake til koden, hvordan i P satt seks gjorde fordelingen koden du er gitt gjøre det slik at PHP ville utgang ting som du skrevet i på forrige skjermen? Og for å liksom undersøke hvorfor det skjer, er vi kommer til å gå inn i index.html, som er den opprinnelige filen, filen dukker opp på denne skjermen med "Si hei" -knappen. Du legger merke til at det er alle de klassiske tingene vi har kommet til å forvente fra HTML slik som disse tingene, disse kodene vedlagt i vinkelparenteser, som PHP men uten spørsmålstegn, noe som indikerer en spesiell ting til HTML. Vi har tittel, som er "hei." Og du vil merke at vi så, tittelen er "hallo" i begge tilfeller. La oss endre dette å "si" bare slik at vi kan skille oss selv hvor vi er. Men vi har fått en kropp. Og så interessant bit, bit som dukker opp i HTML, er denne formen element. Og så har vi fått en form. Og dette er nøkkelen. Dette er hvordan vi jobber med PHP. Handlingen parameter av skjemaet sier at hello.php er det vi kommer til å sende verdiene i dette skjemaet til. Det er der vi kjører parametrene, så å si. Du vil merke en annen ting her er at metoden er "bli". Det er to primære metoder som vil være å bruke PHP for å overføre data mellom websites-- nettsider, rather-- i dette oppdraget. Og disse metodene er "få" og "post". Det er noen subtile Forskjellene mellom get og post at vi vil få into-- vi vil "komme" inn, hvis du vil. Men for alle praktiske og formål, får og post er begge bare måter som du sende parametre med litt ulike henrettelser. For nå kommer vi til å bruke få fordi få var det som ble brukt opprinnelig i PHP-filen fra P satt seks. Og faktisk, hvis vi går inn og se før vi har redigert noe annet, Jeg kommer til å si hei to-- hva heter du? PUBLIKUM: Elliot. SAM LEVATICH: Åh, gosh. Jeg vet ikke hvordan å stave det. Kan du stave det for meg? PUBLIKUM: E-L-L-I-O-T. SAM LEVATICH: I-O-T? PUBLIKUM: Yeah. SAM LEVATICH: Perfect. OK. Jeg antar at jeg visste hvordan å stave det. Beklager for det. Men hvis vi sier "Si hei," det er ikke det er ikke til å dukke opp på skjermen ennå fordi vi endret koden litt. Men hvis vi gjør "Si hei" - OK, så "hallo" er her. Men hvis vi tar en nærmere se på nettadressen selv, vi vil se at det ender med hello.php? name = Elliot. Så dette er en måte å kommunisere til neste nettside parametrene som vi har passert. Vi sa name = Elliot. Og det er til syvende og sist hvordan P satt 6 vist den variabelen som vi passerte i gjennom skjemaet. Og dette er noe som er særegen for en GET forespørsel. En get forespørsel gjør parametrene kjent i nettadressen til nettstedet. Og du vil huske, også, i P satt seks som du måtte skrive en funksjon som jobbet med det faktum at denne søkestrengen kunne eksistere etter en fil. Det kan være et spørsmålstegn etterfulgt ved utgangspunktet vilkårlig antall tegn. Og det er akkurat det som skjer her. Og grunnen til at du måtte analysere det i implementeringen av server.c i P satt seks er slik at du kan fortelle PHP-kode som navnet = Elliot. Du trengte å være i stand til å analysere det ut av URL slik at PHP aktuelle filen visste hva det var å gjøre med. Så forhåpentligvis dette gir motivasjon til å server.c nå som vi går videre utsiden av C i PHP. Så la oss faktisk fokusere på å få tilgang til ting gått gjennom en get forespørsel nå På dette punktet. Jeg kommer til å spare dette. Vi gjorde ikke endre noe. Det ser ut som vi har fått et inntastingsfelt. Vi sette noen egenskaper, som vi kan gjøre en HTML. Dette er enkle ting. Vi trenger ikke disse. Men vi har fått autofullføring av, som i utgangspunktet says-- du vet, når du skriver ting inn i nettet, noen ganger den prøver å fylle det inn for deg. Så det er en fin ting. Vi ønsker å slå den av til dette formålet. Det var en CS50 beslutning. Så vi kan slette det hvis vi ønsket. Autofokus bare stikker markøren i form helt i begynnelsen. Igjen, ikke så viktig. Men name = "navn" - det er litt vanskelig fordi det er navn og navn. Men vi kunne har endret dette til noe annet. Og faktisk, det er hva vi skal gjøre akkurat nå. Vi vil si "person", som er liksom som navn hvis en person er definert av deres navn. Så la oss lukke denne, åpne opp vår hjemmeside siden serveren vår er fremdeles i gang Apache 50, og vi vil si, hei, her Elliot igjen. Hvorfor ikke? Hallo. Og hvis vi går opp her, vi får se så i stedet for navn = Elliot, det står person = Elliot. Og det er et direkte resultat av det faktum at vi nettopp endret name = "person." Så i en inngang element et HTML-skjema, navnefeltet er identifikatoren for den parameter som blir vedtatt. Det er som om du oppretter en funksjon "legge" som tok i to heltall og du sa int en og int b. Det ville være navn en, og hvis du ville ha en annen form, som vi kan gjøre bare ved å kopiere og lime, så vi ville ha navn b. Så nå skal vi ha to parametre som blir ført gjennom komme til neste website-- neste nettside, hello.php. Og vi kan faktisk se det igjen hvis vi ønsker. Dette er den enkleste måten å håndtere nettkoden i IDE, i utgangspunktet. Du starter opp serveren, få det kjører, og deretter hver gang du gjøre noen endringer, bare lukke at filen bare for å være trygg. Ved å trykke på tilbake-knappen er litt vanskelig fordi det kan laste en tidligere versjon, ikke den mest oppdaterte en. Og så kan du bare klikke deg knappen igjen, pop rett opp-- oh, og nå er det to former. Og så hvis vi skriver en ting i hver one-- "jason Hirshhorn," for instance-- vi si hei. Vi ser opp på våre parametere. Det ser ut som vi har fått, som forventet, a = jason og b = Hirshhorn, som representerer de to parametrene at vi passerte til denne funksjonen. Så nå kan vi faktisk komme til implementere den funksjonaliteten som vi hadde i P satt seks. Så akkurat nå er vi bare ekko hei. Og det er ikke veldig nyttig. Vi ønsker å ekko noen variable som ble sendt til oss. Og vi vet navnet på denne variabelen. Vi har en, og vi har b. Slik at vi kunne velge å ekko ett. Men hvordan få tilgang vi det? Vel, det er visse globale variabler i PHP. Og jeg kommer til å skrive dem i kommentarene her. De to viktigste er get og legge for vårt formål akkurat nå. Dette er de arrays eller, Teknisk, ordbøker hvor våre variabler som vi er passerer til neste nettside levende. Og vi skal snart se hvordan du bruker dem. Et annet kort notat om PHP-kode og noen spesifikk av it i C, å erklære en variabel eller å bruke variable du først måtte erklære dem. Og hva du måtte gjøre når du erklærte dem var si int en eller røye b. Du måtte erklære hvilke typer disse variabler før du har opprettet dem. PHP-- du ikke trenger å gjøre noe av det. PHP spør ikke om den type variabel. Og måten du skape en variable-- heller enn si int, røye, string-- som er virkelig char *, som vi know-- snarere enn å gjøre alle det, fordi alt er av samme type, typeless, kan vi bare bruke én karakter, som er dollartegn. Og du vil se det allerede dukker opp, små autofullfør ting. Og det er å si at _GET og _POST er to alternativer som jeg har tilgjengelig til meg. Noen av disse andre tingene er andre globale variabler i PHP at du skal bruke over løpet av P satt 7. For nå skal vi fokusere på få og innlegg. Men dette er et nyttig Det som IDE gjør der en gang du har skrevet i at dollartegn, det vil begynne å fylle i globale variabler eller variabler du allerede har definert. Så hvis du ønsket å definere en variabel kalt "streng" du kunne bare sette den lik "hei." Og det er i utgangspunktet så enkelt som det. Og så kan vi gjøre noe sånt som "echo $ string." IDE bør kaste noen feil hvis jeg gjør noe galt, så forhåpentligvis jeg gjør alt rett. Men bugs alltid oppstår. En annen lur ting om PHP er at det ikke er utarbeidet. Så med C-programmer, ville du gjøre den daglige rutinen of-- utgangspunktet, du ville gjøre endringer til koden din, vil du lagre det, og så ville du gjøre det, hvor make var trinnet som kalles kompilatoren, clang, gjøre koden, denne teksten fil, i en kjørbar. PHP er C-aktig, men det er utført på sparket av nettleseren din. Så det er ingen måte å vite. Gjør ville kaste dem nyttige feil, ikke sant? Det ville være som, du erklærte ikke denne variabelen før du prøvde å bruke den. Du gjorde alt dette dårlig stuff-- segfault, segfault, all den slags moro ganger som fulgte med make. PHP er et tveegget sverd fordi du ikke vil få disse feilene, men det betyr også at du ikke vil vite egentlig hva som er galt med programmet hvis du bare kjøre den og den fungerer ikke. Men debugger skal peke ut noen forhåpentligvis nyttige småting syntaktisk at du kan fikse. Så nå hvis vi går over to-- si, la oss lukke det. Gjenåpne. Og vi er tilbake til her. Så vi har en variabel og en variabel b. Og disse vil ikke slutt saken. Vi kaller dem h og g uten noen spesiell grunn. Og vi sier hei. Nå ser det ut som vår string "Hei" er faktisk utskrift. Vi skapte en variabel kalt "streng", sette den lik "hei." Legg merke til at vi ikke har å gjøre malloc eller gjøre et tegn array. I PHP, fordi variabler er typeless, en streng er den samme som for en char alle praktiske formål. Dette kan være "hei." Dette kan være akkurat den karakteren k. Dette kan være et tall 1. Og det bryr seg ikke. PHP ikke bryr seg om hvilken type variabel. Eller, det gjør det vare. Det bryr seg når du prøver og gjøre ting med det, men det bryr seg ikke i erklæringen trinnet. Og akkurat som du kan i C, kan du erklære strenger på stakken som dette om å si "stack" er en liten litt av en potensiell misvisende når vi snakker om PHP. Men vi trenger ikke å bekymre deg for det. Så vi fikk vår string "Hei," og vi ekko streng. Så nå har vi diskutert variabler. Så nå må vi snakke om get og legge og utføre den endelige ting som er nødvendig for å virkelig få dette opp igjen til funksjonaliteten av P satt 6. Så akkurat nå er vi ekko strengen, men vi har disse variablene får og post. Og fordi vi bruker metoden får, det synes naturlig at vår variabel som vi er interessert i, både a og b, vil bli plassert i matrisen eller ordbok, teknisk får. Så hvis vi setter opp blir som dette med groups-- jeg trykket angi og det liker ikke it-- men her har vi får. Og så får allerede eksisterer. Så vi kan allerede nå begynne å få tilgang noen av elementene i Get. Hvis vi får denne syntaksen for arrays i PHP er veldig C-aktig. Vi har våre to hakeparenteser. Så hvis vi sier får i en vanlig array, kan vi få tilgang til zeroth indeksen, den første indeksen. PHP er null indeksen. Vi kunne si null, en, two-- ting som dette. Og jeg har sagt at få er teknisk sett en ordbok. Så hva PHP gjør under panseret, som er litt bedre enn C, er det allerede gir deg noen ordbok funksjonalitet, som er egentlig hash tabeller, eller prøver å, visstnok. Eller, teknisk sett kan være en prøve så godt. Men PHP gjennomfører en hash table, som danner en effektiv ordbok. Og så vi vet navnet av våre variable, ikke sant? Det blir vedtatt i søkestrengen av PHP. Vi har a = b = h og g og der b er navnene på variablene. Så den måten at vi kan få tilgang til verdi som svarer til den tast i vår ordbok er bare ved å si _GET_GET ["a"]. Så nå har vi _GET ["a"]. Og hvis vi bare erstatte inne vår ekko, hvis vi ekko _GET_GET ["a"] - og vi får se om det debugger kaster eventuelle feil om dette-- vi vil lagre det og lukke ut dette. Åpne den opp. Så vi bare gjør en rett nå, så b bør ikke saken. "henne" og "ham" - "hum". "henne" og "hum". Høres bra ut. Og det skrives ut "henne", som er gal. Men det er akkurat det som foregikk i P satt seks. Innerst inne, hva P satt 6 var doing-- echo hello, name-- hvor det hadde en variabelnavn og det bare ber deg om å skrive inn det litt av teksten. Det var også noen tilleggskode der det inkludert hvis uttalelser, som vi kan gjøre akkurat nå. Vi kan si at hvis det finnes, som er en funksjonalitet innen PHP, _GET Med understrek, "navn" - som er utgangspunktet si, "hvis navn er blitt fylt i" fordi vi kunne bare ha klikket på knappen å sende inn skjemaet uten å skrive noe inn det feltet. Og vi vikle at i vår vennlige klammeparentes. Vi kan ha et annet utsagn. Og det er alt innen PHP vinkel brakett, spørsmålstegn, vinkelbeslag, hvis du vil. Og nå får vi se om dette fungerer. Jeg fortsetter å vente på det å feilsøke og crap ut på meg, i utgangspunktet, men det har ennå ikke. Kanskje det vil nå fordi jeg snakket om. Jepp. Det gjorde det, faktisk. Så, er det ingenting å dukke opp. Det er på grunn av noe galt som jeg skrev i PHP-koden. Og jeg nevnte debugging er vanskelig fordi i PHP, vi ikke kompilere det på forhånd og kompilatoren ble ikke liker, her er hvor feilene er. Men det vi kan gjøre er-- gjøre folk husker hvordan å se på ulike nettverk forespørsler som PHP-- eller at nettsteder sende? [? Malin?] Gjorde dette i foredrag en gang eller to. Husker du hvor vi går for å finne de ulike gjeld og 200 OKS, alle disse kodene som blir sendt gjennom HTTP fra nettside til nettside? Er det noen som husker hvor vi går for å gjøre det? PUBLIKUM: Page Source. SAM LEVATICH: Side kilde. Nettopp. Hvis du går til siden Source-- perfekt. Så Page Source trekker opp inspektøren. Og jeg bruker Safari. Mange av dere vil sannsynligvis være bruker Chrome eller Firefox. Men så lenge du er i enhver moderne browser-- og føler seg fri til å følge sammen hvis du vil. Du kan skrive opp denne koden eller bare se inne i P sett 6 katalog for noen lignende ting. hello.php er hva vi er jobber for tiden med etterligning. Så det er en rekke kategorier. Vi kan se på alle ressursene. Vi kan se kildekoden. Så ser ut som det gjorde ikke komme forbi kroppen til slutt. Det funnet en feil i PHP, og det stoppet lasting av hele nettsiden. Vi har ikke engang en slutt tag for HTML eller noe. Og hvis vi ser på nettet, kan vi se at vi blir sendt en forespørsel. Dette er domenet. Dette er adressen. Det er et dokument. Vi bruker GET-metoden. Og det er rødt. Eller, det ble rødt når jeg ble ikke velger det. Hvordan velge bort jeg det? Vel, det var rødt. La meg oppdatere. Det er det. Nå er det rødt. Så det er rødt, som betyr det mislyktes, noe som er dårlig. Så la oss undersøke hvorfor det gjorde mislykkes. Så alt at Page Source kan utgangspunktet fortelle deg er din greie fungerte ikke, som vi allerede kan se. Så ideelt sett ville det være et mer nyttig verktøy. Og er det noen nettleserutvidelser som tillater deg å feilsøke PHP, men vi kommer ikke til å være å skrive massevis av PHP, så det er nok bare beste å se gjennom koden din nøye og bare sørge for at det er ikke å gjøre noe annet. Så la oss se om formatet på denne hvis setningen er der problemet ligger. Jeg ønsker å laste det opp igjen her. Hei, hei. Så det er et problem der. Så for riktig syntaks av PHP, er PHP kommer å være C-aktig i at du får se sløyfer. Du får se om uttalelser. Du vil se alle disse vennene at du har blitt kjent med løpet av denne CS50 semester. Men den beste måten å finne ut hvordan du gjøre noe i PHP er å google det eller for å se på noen eksempler på PHP-kode fordi du vet funksjonaliteten. Du vet hva du kan gjøre med programmet. Du kan sløyfe. Du kan sløyfe så mange ganger du vil. Du kan sløyfe i alt slags forskjellige måter. Du kan lage funksjoner. Du kan opprette funksjoner som ringe andre funksjoner, funksjoner som kaller seg. Og har du navnene på disse begrepene. Du har rekursjon, løkker, hvis, andre kontrollstrømmer. Og slik Google er din beste venn. Selv sier, "PHP hvis statement "og det vil være tonnevis av innlegg med svar til andre mennesker som har hatt lignende spørsmål til deg, som bare starte opp med PHP og er nysgjerrig på en syntaks ting. Fordi vi har luksusen av å være i stand til å se på koden i P sett 6, vi faktisk dra den opp og se at OK, her er noe interessant. Så dette er hva det faktisk så ut i P satt seks. Så hvis vi går gjennom dette, Vi kan se at vi har fikk flere av disse små PHP-lignende spørsmålstegn biter. Og det er ikke klammeparentes. Det er kolon. Og det er krøllete bukseseler i PHP, men dette er et format og en måte å gjøre PHP som fungerer godt med HTML fordi som du ser, vi lukker off disse PHP bits-- den andens og ifs og alle at-- og deretter vi intersper HTML inni dem mens de fortsatt følger kontrollflyt satt ut av PHP. Så jeg skal bare rask spasertur gjennom denne fordi det er mye av det samme konsepter som vi gjorde før. Vi har fått hvis ikke tom, parentes, _GET_GET ["navn"]. Dette er alle de samme tingene. Vi bruker den _GET ordbok som PHP sender på forespørsel av former, fordi det er parametrene av virkning, og fremgangsmåten er å få. Og da ender det. Kolon er et signifier å bare gjøre dette hvis hvis setningen evalueres til sann. Det er som en klammeparentes. Og faktisk, det er en klammeparentes i andre språk som Python, som kan oppstå hvis du bare gjøre det for det endelige prosjektet. Og så denne linjen, hallo. Så har vi denne rare ting. Vi har fått flere konsoller. Det er ingen HTTP det-- eller PHP, beklager. Men det er et likhetstegn. Og så har vi en funksjon, htmlspecialchars (_GEThtmlspecialchars (_GET ["navn"]). Dette er liksom som en mer avansert versjon av ekko. Som vi hadde ekko som en måte for å skrive ut ting i PHP. Dette er en funksjon som er definert i PHP som vil omhandle litt mer ekkel tegn og byte-verdier at du kunne passere den. Det er alltid tryggest å bruke denne. Men ekko vil gjøre jobben bare fint hvis vi ikke er arbeider med noe som er for stygg. Og slik at dette har samme Effekten av utgangspunktet, denne ting i mellom spørsmålet merkene er evaluert av PHP. htmlspecialchars returnerer en fin HTML trykt verdien av _GET_GET ["navn"], dvs. hva vi skrev i form. Og så vil det si hei, komma plass, og deretter det. At hele greia mellom vinkelbrak vil bli erstattet av hva htmlspecialchars legger ut. Så det er i utgangspunktet like til det vi holder på med. Og vi har et annet utsagn som er hello world, som er fornuftig. Så nå la oss gå tilbake til vår kode og se exactly-- oh. I nevnte eksisterer, som ikke er en ting som vi ønsket å gjøre. Vi ønsket å si ikke tom. Og så dette bør jobbe litt litt bedre, ikke tom _GET_GET ["navn"]. Og at klammeparentes kamper som curly brace. Vi har fått våre klammeparentes her. echo hei _GET ["navn"]. La oss se om dette fungerer litt bedre. Vi er fortsatt kjører serveren vår. Hei Jason. Hei Jason. Og det fungerte denne gangen. Og så det er et bevis at du kan faktisk bruke klammeparentes som du kjenner og elsker i PHP-koden i HTML. PHP-koden gitt til du i PSet 6-- PSet 6-- gir en annen måte å gjøre det samme. Så nå har vi makt. Vi har funksjonalitet for å implementere PHP-kode som vi så i PSet 6 av oss selv, i utgangspunktet. Før jeg går videre, hva er noen av de spørsmål som du har på dette punktet? Ja [uhørbart]. PUBLIKUM: Så i den versjonen i pset6, når du kjører den, det er en plass. Og jeg kan se hvor plassen er etter komma. [Uhørbart] start den åpne braketten. Hvordan innlemme du gjøre plass i måten du skrev dine egne koder? SPEAKER: Det er et godt spørsmål. Og så la oss finne det ut. Så det er et veldig godt spørsmål og en som jeg ikke vurdere. Men la oss gjøre det sammen. Så først av alt, hva Jeg gjør med ekko er når vi bare ekko hallo, utganger det hei. Hvis vi ekko nå dette komme på et eget linjen, la oss undersøke hva som skjer. Så vi klikker på denne. Vi fortsetter å si, hei Jason. Så igjen, har vi ikke denne plassen. Og det er fordi, i PHP, når vi har ekko, uansett hvor mange spaces-- nope, ikke V-- uansett hvor mange plasser vi satt i her-- hvis vi nå laste det opp igjen, hei Jason. Ja, se, alle de mellomrom fikk spist opp. Og det er noe som ekkoet funksjonen gjør. Så for å ta vare på at plassen er og dette en av grunnene hvorfor du ikke bruker ekko og du bruker htmlspecialchars stedet. Jeg er nysgjerrig på hva ville skje hvis vi gjorde dette hvor vi vedlagt en plass i en streng. Jeg er ærlig talt ikke sikker på hva vil skje når jeg gjør dette. Så det er en vei. Det er en måte å ta vare på den. Hvis du vikler opp plass i en streng, så plassen vil bli sendt ut pent av ekko. Den sikreste tingen å gjøre er å gjøre htmlspecialchars. Det er alltid den sikkert kort. Men nå har vi en måte å gjøre den med ekko hvis det er nødvendig. Og på en lignende måte, kan vi ekko nye linjer, alle slags av ting du er kjent gjør i PHP. Noen andre, hva er noe mer spørsmål som andre folk har på dette punktet om PHP? Hvis folk viste litt sent, Jeg er glad for å bo etter en liten bit og snakke om noen av begynnelsen. Og det er også alt livestreamed, og arkivert, som er gal. Uansett, så nå la oss gjøre noen mer avanserte ting med PHP. Og en av de tidligste tingene du ble introdusert for i C var for sløyfer. Og PHP har en kraftigere for sløyfe kalt foreach loop. Og det ser ut som dette-- for hver tomt som tomme, klammeparentes, gjør ting. Så dette er egentlig en forkortelse. Se, for loop som en syntaktisk konstruksjon ble utviklet i C og i forsamlingen språk og ting liker. Utviklet i C, nettopp, som en forkortelse for mange av de typer sløyfer at folk ville se. Som når du skrev en loop, der var ofte en initialiseringstrinn henrettet helt i begynnelsen, en tilstand hvor sløyfen ville stop-- og det er den funksjonen det er bare på en stund loop, eller som en stund har nøyaktig bare at feature-- og deretter en incrementation skritt på slutten. Og så du vil ofte finne deg selv skrive kode som følgende. Jeg kommer til å slette noen av dette. Men hvis vi gjentar gjennom tegn i en matrise, for eksempel, som vi har fikk en rekke tegn. Beklager å bringe tilbake C. Jeg vet, du trodde du var ferdig. Men det er bare for det formål av å lære PHP, jeg lover. Så hvis du fikk en char str av lengde 8, og la oss si det står Hellooo med en etterfølgende null. Stor, så det er vår streng. Og så hadde vi en for loop. Vi har int i lik 0. Og vi ønsker å gå ut når str av lik jeg ikke er lik null, fordi vi avslutter når det er lik null. Og så gjør vi i ++ på hver punkt i for loop. Gjør noe med str av i. Så grunnleggende formelen var, vi hadde denne matrisen som vi ønsket å behandle som egne elementer. Men hva vi måtte gjøre, er vi måtte utgangspunktet opprette en egen heltall variabelen som var telle opp hver Da vi gikk gjennom løkken. Og så ville vi måtte deretter ringe strstr [i] når det vi egentlig ønsket å gjøre er bare gå karakter for tegn, ikke sant? Vi ønsker ikke å øke en heltall og deretter bruke denne heltall for å få tilgang til hver karakter individuelt. Vi ønsker virkelig tegn for tegn. Og så for hver intelligent beregner at for oss. Hvis vi har en matrise, som vi kan erklære i PHP som just-- hvis vi har en variabel kalt, la oss kalle det array. Mirakler av ikke å skrive, er det akkurat som alle andre variable. Det er bare en matrise. Og vi har en liten [uhørbart] som en, 2, 3, bare en slags initialisert array. Det er OK, det liker ikke min foreach. Men hvis vi foreach-- faktisk Jeg skrev det litt feil. Det er to måter å gjøre en foreach loop. Det er i syntaks og som syntaks. Og vi kommer til å gjøre i syntaks første, ikke så. Det er min feil. Så foreach num i array, ekko num. Og PHP er roping på meg for noen grunn. Det å finne en uventet i på noe, som er litt av en plage. Men vi vil finne ut hvorfor det er i et øyeblikk. Så ikke sånn. La oss prøve å bruke den som. Den foretrekker den som syntaksen er virker. Så la oss gjøre foreach matrise som num. Så en liten forklaring av hva som skjedde er den som syntaksen saying-- godt først, la oss se på hva dette skrives ut. Så åpner vi opp vår IDE. Vi går her. Vi sier: Hei Jason. Og det gjorde 123, som var innholdet av tabellen at vi skapte opp toppen. Så dykke inn i denne foreach loop, vi har en variabel kalt matrise som er en matrise av tre tall. Og så gjør vi foreach matrise som num, ekko num. Og det er mer intuitiv enn en for lop. Vi sier, behandle hver av ting i rekken som num, Jeg vil at du skal gi meg num. Og det er akkurat det det gjør. PHP beregner at når du sier foreach array, og du arbeider med en rekke, hva du kommer til å ønske å iterere over er karakterene i denne matrisen, er ints i denne matrisen, er elementene i den oppstillingen. Og det er slik at du kan lagre disse variablene som num, og så bare utgang num med en gang i stedet for å si: Jeg har en variabel som heter jeg, og da vil jeg utgang strstr [i]. Og slik som tillater oss å gjøre kule ting. Som i utgangspunktet vi ikke trenger å lage disse variablene som jeg er og gjøre alt dette incrementation ting på slutten. PHP tar seg av alt dette for deg. Så nå la oss snakke om foreach som det gjelder vår _GET ordbok. Så vi vil kommentere dette ut raskt. Så vi har vår _GET array. Vi har denne variabelen. Og det har noen ting i den. Akkurat nå har vi bare én variabel som sendes til det, som er navnet. Men hvis vi på Enter, nå vi kan ha to variabler. Vi kan ha navn og alder, for eksempel, hvis vi ønsker å få alder og også navnet på en person, pussig nok. Så nå _GET kommer til å bli en ordbok med to elementer, med to sentrale verdiparene. Og den første key-- jeg kommer til å skrive dette opp på bordet også. Vi har vår ordbok er _GET. Beklager, det er er litt vanskelig å se. Men inni vår ordbok vi har navn, som kommer til å være noe at vi er gitt. Og vi vil ha alder, som også er kommer til å være noe som vi er gitt. Og dette er helheten av vår ordbok. Så det har to elementer i den. Og så fordi foreach sløyfer er smarte, vi kanskje tror, ​​og riktig tenker kanskje at foreach kan iterere gjennom denne ordbok, skrive ut verdiene gitt ved navn og alder. Så la oss faktisk gjøre nettopp det. La oss bygge en foreach loop. Og vi kommer til å gjøre for _GET as. Og vi kommer til å gjøre følgende. Så la oss se hva som skjer når vi taster bare ord, og deretter si ekko ord. Vi kommer også til å ekko en ny linje bare for å gjøre det litt klarere, hva er det som skjer. Så la oss se. Det er ikke å gi meg noen feil. Og vi vil lukke denne. På vår hjemmeside, du kommer til å gjøre mye av det i løpet av pset7. Så vi sier mitt navn er Sam. Min alder er 45. Det er ikke. Men det skrives ut, som forventet, Sam 45. Og så vil du legge merke til at hva foreach løkke did-- her, la oss gå tilbake til det, så det er opp på board-- får vi _GET som ord. Og det var fire ting i _GET. Men det bare skrives ut to ting. foreach, å være sin intelligens selv, antok at det vi egentlig ønsket var verdiene, ikke nøkler. Men det er en måte at vi kunne skrive ut nøklene også, hvis vi ville. Hvis vi ønsket å også vite hva disse variablene ble kalt, det er en måte at vi kan få tilgang til dette også. Og måten å liksom gjøre det, så vi kan si, kan virkelig dele den opp i sentrale verdiparene. Så la oss se hva som skjer nå. Så vi har nøkkelen. Vi har verdi. Vi har en annen ny linjen for lesbarhet. Og la oss se hva som skjer når vi gjør dette nå. Jeg vet ikke hvor gammel Jason er. Jasons 15. Så vi har navn Jason, 15 år. Så var vi i stand til å få tilgang til nøkkel og verdi par av denne ordboken bare ved å si som viktige punkter til verdi. Og det er en foreach syntaktisk sukker bit som gjør deg tilgang til ting i ordlisten. Så forhåpentligvis denne typen streker kraften i foreach loop. Du kan ganske mye kast noe som synes iterable, som noe som har flere elementer som en matrise, som en dictionary-- de er to viktigste tingene du skal jobbe med både i livet og i PSet 7. Så du kan kaste at ting på det, og det vil finne ut hva du vil gjøre med det. Det vil si, OK, jeg kommer til å få disse tingene fra de data som ble sendt til meg. Og det er noe som du er kommer til å bruke mye i PSet 7. Jeg kommer til å bla fort ned bare for å se hvor jeg er på. Har folk har spørsmål på dette punktet? Spørsmål i det hele tatt? Ja? PUBLIKUM: Så med nøkkelen og verdi, du kan kalle det noe annet og det vil fortsatt fungere? SPEAKER: Oops. Wow, jeg helt slettet hele linjen. Flott arbeid. Så en, en. Nøkkel og verdien er bare en konvensjon. Det er nyttig. Du vil få noen design poeng, kanskje noen stil poeng for å gjøre det fordi det virkelig formidler intensjonen. Men vi sier et og yarp. PUBLIKUM: Du trenger ikke å endre noe i HTML-filen for å reflektere det? SPEAKER: Ikke i det hele tatt. PUBLIKUM: Og det bare vet at på grunn av den tilsvarer større than-- SPEAKER: Ja. PUBLIKUM: --that indikator på at that's-- SPEAKER: Ja. Det er en foreach syntaks, men ja. PUBLIKUM: Det er ikke typer. Så hva om du ønsket alder å bare være et tall? Er det en måte å gjøre det? SPEAKER: Det finnes måter å kontrollere om variabler i samsvar med visse typer. Så PHP spør litt mer fra deg fordi det ikke er noen typer i. Noen måter den ber mindre. På noen måter spør det mer. Fordi hvis du har bare noe i en variabel, du aner ikke hvilken type det er. Men hvis du er smart om variablene at du tilordner typer til og sørge for at som fungerer bare return-- deg Vil funksjoner til kun retur en type verdi så at du kan i utgangspunktet forvente at variabelen du får tilbake fra en funksjon vil være av typen at du tror det vil være, i utgangspunktet. Men det er noen metoder som du kan sjekke. Jeg kan ikke huske dem på toppen av hodet mitt. Jeg venter på det å bli blått. isint? isstr? Det finnes metoder innebygd i PHP som kan sjekk den type variabler for deg. Men hvis du tilordne variabler smart, bør du ikke må gjøre det for mye i PSet 7. Men disse metodene finnes. Og det er noe som er i språket i seg selv. Og jeg husker ikke nøyaktig syntaks. Vi kunne selv slå det opp. Men tiden er kjernen. har Har noen andre har flere spørsmål? Ja. PUBLIKUM: Jeg har bare en mer. Så du nevnte GET-metoden, men du nevner ikke POST-metoden. Vi kommer tilbake til det? SPEAKER: Ja, vil vi komme tilbake til det. Det er akkurat det jeg var ute på min telefon, som nå sovnet, men jeg finner den. Bare pass på at vi treffer alle PHP notater. Jepp, det er ingen debugging versjon. Ja, vi har noen flere ting som vi ønsker å gjøre nå på dette punktet. Så snakker om POST, som du nevnte, den eneste forskjellen mellom GET og POST er som husker da vi så på denne nettadressen, og vi så, oh, navn tilsvarer en og alder er lik yarp har rett i nettadressen der for oss. POST er litt mer hemmelighets med sin passering av informasjon. Så hvis du ikke vil at en bruker kjent, for eksempel, du ikke ønsket brukernavn og passord på personen logget inn for å bli vist i URL-adressen, som er en fornuftig ting å ikke ha i nettadressen, fordi noen kan se det. Hvis de knytter noen til en side, du ønsker ikke deres URL pusset der, fordi det ville tillate folk å logge inn bare med lime av en URL i stedet for faktisk å fylle ut et skjema. POST er litt mer hemmelighetsfull. Og det eneste som vi må endre er denne metoden, endringen fra å komme til innlegget. Og så inne i HTTP, i stedet for tilgang rekken _GET, vi kommer til å få tilgang rekken _POST. Og vi vil legge merke til at dersom vi åpner dette opp igjen, Jason langsomt avtar i alder. navn Jason, alder 14. De samme tingene spretter opp. Men vi går til nettadressen og disse variablene er ikke der. Og måten POST passes-- så husk hvordan å se på kilden til en side. Vi går til nettverket. Vi oppdatere. Og dette er en annen ting som POST vil gi deg advarsler om. Du har kanskje sett en boks, en tekst box som dette i nettleseren din. Er du sikker på at du vil å sende en form igjen? POST er hva som er å sende disse skjemaene. Fordi utgangspunktet hvis du har sendt din kredittkortinformasjon til noen, som ikke kommer til å dukke opp i nettadressen. Det kommer til å bli en POST-forespørsel. Så når du oppdaterer siden, det er den sender det innlegget forespørsel. Så nå er vi ønsker å sende danner igjen fordi det ikke kommer å skape noen dupliserte kjøp. Og vi vil legge merke til at her nede, metoden vi bruker er POST. Og det gjorde faktisk overføre bytes. Det overførte 401 av dem. Programmet er ganske liten. Men det er intet som vi kan se verdiene som blir vedtatt. Nettsidene selv kan se, men vi som brukere ikke er i stand til å se, med mindre du er en hacker. Hvis du er en god hacker, kan du se. Hvis du vet det grunnleggende format av HTML, verdiene vil gjøre seg kjent på sidene. Du vil være i stand til å se. Verdiene vil være der, de er bare litt mindre opplagt for deg å få tilgang til, i utgangspunktet. Har vi noe mer spørsmål om GET, POST before-- hva vi skal gjøre videre er faktisk ser på noen av koden at du gir i PSet 7, snakke om hvordan den bruker noen av disse begrepene, og snakke om ting som du skal til å gjøre litt i PSet 7. Flere spørsmål før det? Flere spørsmål dere har? Flott. Greit, la oss se litt på PSet 7, ingen tvil om hva du er alle mest begeistret for. Jeg mener, dette er noe som David går gjennom en liten bit. Men vi vil ha tre kataloger på topp, samt en konfigurasjonsfil. Det er for databaser, som vi vil snakke om i omtrent fem minutter. Inkluderer du aldri trenger å se i denne katalogen hvis du ikke vil, men det er fint å vet det er alle slags hjelpere. Hjelpere er like nyttige funksjoner. Og så har vi config, som setter noen ting opp. Det er noen funksjoner som CS50 har skrevet at er i hjelper og config. Og noen av PHP som allerede kommer ut i filer vil gjøre mye av de mer sort av stumpe etappe arbeidet for deg. Som hvis vi går inn i offentlig login.php, som er det dukker opp til høyre når du går inn PSet 7. Vi vil se at det er Dette krever uttalelse. Og det liksom som en skarp inkluderer hashtag inkluderer hvis du er av en nyere generasjon. Men dette utgangspunktet sier at jeg trenger tilgang til alle funksjoner i config.php. Og du kan ha et behov for alle slags andre ting. config krever faktisk hjelpere. Så når du trenger config, du også inkludert eller krever hjelpere i tillegg. Slik som gir deg tilgang til alle kule funksjoner som vi kommer til å bruke, Ting som gjengi. Jeg faktisk kommer til å lette dette ned litt. Så funksjonen da er vi kommer til å gå gjennom like før vi går videre til SQL litt bit er login.php funksjon, bare fordi den bruker noen av temaene at vi bare snakket om i PHP. Du ser det første er hvis $ _SERVER. Dette er en annen global variabel som du kommer til å være med å gjøre. Det er som _GET og _POST, men hva Serveren inneholder dette kan la deg vite om forespørselen metode var en GET eller POST. Som tidligere hva vi gjorde er bare i vår kode som vi skrev, vi var bare å endre det å være få og POST avhengig av hva HTML har. Men det er sider som kan være nås med begge typer henvendelser. Og du vil kanskje gjøre forskjellige ting avhengig av typen anmodning akkurat som innlogging gjør. Så du kan sjekke at forespørselen metoden gjennom tilgang til nøkler, gjennom å bruke en nøkkel og få verdien av noe i ordlisten _SERVER. Så det er en annen global variable som _GET og _POST. Hvis det er GET, vi ønsker å gjengi innloggingsskjemaet. Render er en funksjon som i utgangspunktet bare setter opp den aktuelle HTML og sender den enkelte parametere. Denne tittelen er en parameter som er brukes i visning, merkelig nok, tittelen på siden i spørsmålet, tingen her oppe, si eller hallo i vår forrige eksempel. Nå har vi en annen ting. Annet hvis det er POST, vi gjøre noen andre ting. Vi bruker den tomme metoden. Det er ikke eksisterer, den er tom. Og vi så før, PHP har en god del av bygget i metoder som David will-- hvis det er metoder som er nyttige for deg, de vil bli varslet til deg i går gjennom at David gir i begynnelsen oversikt, og også Zamyla er nyttige biter. Hun er tilbake alle. Vi kan alle glede seg. beklager er et treffende navn funksjon at bare utgangspunktet skrives ut noen feilmeldinger, fordi CS50 er veldig høflig. Og nå dette, dette er en vanskelige biten fordi dette er der vi spørre databasen. Nå har vi ikke snakket om databaser. Og vi kommer til i neste fem minutter eller så, maksimum. Men dette er en funksjon at CS50 har skrevet for å få en tabell i utgangspunktet fra en database at vi arbeider med i PSet 7. Jeg er veldig dårlig med min null indeksering dag. Men ja, det er syv. Så spør det kommer til å returnere en matrise, er i utgangspunktet den nøkkelskjegget. Og fordi disse tingene ikke har skrive, så rekker er en matrise av arrays. Fordi når vi tenker på et bord, hva vi skal gjøre er, som du lærte i psets som spillet på 15, uansett hvor du måtte bruke en double array, vi i utgangspunktet har rekke andre arrays gjør en tabell. Og du har rader og kolonner. Og så kan du få tilgang til dem som [0] [1], får du [0] [1]. Grunnleggende ting som det. Så hva vi gjør her i denne funksjonen vi ber databasen hvis brukeren som er prøver å logge inn, vil det være sendes gjennom POST-metoden. Vi får se vi får brukernavn fra _POST. De vil har sendt, brukeren eller du vil sende en verdi gjennom en form gjennom POST fordi det er brukernavn og passord ting. Vi sjekker inn brukernavn å se, er dette i tabellen? Fordi hvis en bruker logger i, da deres brukernavn bør lagres i tabellen over brukere som eksisterer for dette nettstedet. Så i utgangspunktet hvis Brukeren er i databasen, spørring kommer til å returnere denne raden, som er en matrise. Men den vanskelige delen er at hvis selv om den doble matrise er bare av en rad, selv om det er en en rad array-- som du har fått basically-- hvis du har en størrelse ett array som holder en annen array, du egentlig gjøre med én kolonne. Men det er fortsatt behandlet som en dobbel array. Og det er her det kan noen ganger få vanskelig, fordi vi har fått rader her. Vår variabelen er rader. Og så skal vi lage en ny variabel kalt rad og sette den lik den første raden av rader. Og du vil merke at kommentaren sier det er den første og eneste rad. Så dette er vanskelig del der nå funksjoner kan returnere arrays meget lett. Det er ikke mallocs. Du vil ikke se mallocs. Så du vil ikke se SEG feil. Men funksjoner vil fortsatt være bestått rundt arrays og data i grupper. Og du må være forsiktig med hva akkurat dine funksjoner vil returnere. Og selv om det er en kolonne som dette, må du sjekke er fortsatt kommer til å returnere en dobbel array. Så for å tilgang som column-- eller du kan tenke på alt dette som invertert siden vi snakker om rader. Men for å få tilgang til én rad, du kan ikke bare si rader. Selv om det er én rad, må du trenger rowsrows [0] for å liksom eliminere denne ytre bit av tabellen og har bare din én rad. Gjøre noen andre ting. Det er en funksjon kalt password_verify som verifiserer passordet som ble postet. Og så ser vi en annen global variabel her, _SESSION. I utgangspunktet session id er hvordan du holde styr av om noen er logget på eller ikke. Så akkurat nå med login.php, vi logger en bruker i. Så det vi ønsker å gjøre er vi ønsker å si økten id er lik rad id, som bare er fornuftig fordi hver rad vil ha en annen id antall som en del av bordet. Vi får inn SQL i en sekund, slik at hvis noe av denne virker litt som blah, så alt vil bli ryddet opp. Men vi kommer til å sette id lik den riktige tingen, logger brukeren i. Beklager hvis noe går galt. Og det er innlogginger formål i livet som professor Malan ville si. Så det var login.php. Og mye av PHP koden du skriver i PSet 7, vil de være litt. Ikke glem å chmod til de riktige tillatelsene. Det vil være litt om at det i begynnelsen av spesifikasjonen. Men PHP som du er skriving kommer til å være gjøre ting som ligner på dette. Du kommer til å være tilgang til noen ting som er gitt til deg i globale variabler i PHP som har å gjøre med den nåværende innlogget bruker, om det har vært forespørsler sendes til denne side, forskjellige ting som det. Og det vil også være potensielt itera gjennom rader av denne tingen. I en annen funksjon, spørring starter opp igjen denne doble array. Og hvis det er flere enn én rader i det, Hvis det are-- ja, hvis der er mer enn én rader i det, så vil det være en tabell. Og du vil kanskje reagere gjennom radene av denne matrisen ved hjelp foreach loop som vi beskrev. Så hvis du gjør foreach på en dobbel array, hva vil word-- her, Jeg skal faktisk skrive det. Jeg skal skrive det raskt her. Hvis vi har en foreach rader som rad, hva er den type rad? Er det noen som vet? Du har det? Så rekker er en dobbel array. Så hva er foreach kommer til å antyde at vi ønsker fra denne doble utvalg hvis vi gjentar over det? Vi kan i utgangspunktet anta at det kommer til å være enten elementer, eller rader eller kolonner, i utgangspunktet. Og så rader og kolonner vi kan behandle som det samme. I utgangspunktet hva foreach løkke kommer å gjøre er det kommer til å returnere rader. rad kommer til å være av typen p, mens radene er en dobbel array. Så hvis du gir foreach en dobbel array, er det ikke kommer til å reagere mer enn ett nivå. Som er utgangspunktet for å si om det er åtte celler i denne table-- 1,2, 3 4, 5, 6, 7, 8-- den foreach løkke er ikke kommer til å gå gjennom hver av disse cellene. Hva foreach løkke vil gjøre ble det vil gå gjennom denne rad, gi deg hele denne raden. Og så skal det gå gjennom den raden. Så det bare gjentar ett nivå dypt. Hvis du legger til en nestet foreach loop, så du kan behandle hver rad returnert fra rader, gjør du foreach rad som element, la oss si. Og så kan du ekko elementet. Så det er en kort liten oppfriskning på hvordan du kanskje bruker foreach looper i sammenheng med søket. Er det noe du lurer på PHP? Noe som helst før vi gå videre til å snakke om SQL og moro av databasen? Føles godt? Føles godt. Greit. La oss gå videre tilbake til PowerPoint, som du sannsynligvis glipp av. SQL, yay. Folk som er i min seksjon typisk vil vite at varenumrene til akronymer er alltid bare de første ordene Jeg tenker på den kampen som algorithm-- at akronym. Det er ikke en algoritme. Så SQL er en database. Det er et språk som arbeider med databaser. Og alle databaser er er bord, i det minste på den måten at SQL representerer dem. En annen måte å tenke på databaser er databaser er et sett med nøkler og verdier i utgangspunktet. Du kan tenke på en database som en ordbok og også som en tabell. I utgangspunktet er det en måte å knytte forskjellige data med andre data, ofte gjennom rader og kolonner. Og det er slik det er SQL fungerer best. Så dette er et eksempel på et bord. Jeg har et par eksempler på mennesker i avsnittet mitt, som Jeg hadde ikke tid til å endre. Men vi har fått ting som ID, navn, supermakt, og hjemby. Jeg vet ikke hvor alle er fra i min del, så jeg skal bare anta alle er fra New York Byen fordi jeg har en høy statistisk sannsynlighet for å være riktig. SQL vil automatisk ta omsorg av ID-kolonnen for deg. Hvis du setter inn en ny rad inn i en SQL database, det vil øke som ID-nummer og bare utgangspunktet stikke ut fem navn, supermakt, hjemby, hvem på enden av den tabellen. Så ID er en kolonne du vil aldri trenger å bekymre seg for. Men, som i tilfellet av login.php, når vi var å få økt-ID fra et bord og bare bruker-ID, ID er en måte å identifisere et element av en database. Så hvis vi hadde to Sams, som begge som underviste CS50, og begge som var fra Milwaukee, de ville fortsatt har forskjellige ID-numre og dermed være tydelig i sammenheng med tabellen. Så dette er hva SQL er å håndtere med, arbeider med i bakenden. Nå er det disse fire kommandoer at du må jobbe med SQL. Og jeg kastet dem opp på ett lysbilde. Men vi kommer til å gå gjennom dem alle individuelt. Den første kommandoen er UPDATE, som gjør hva man kunne forvente. Fortell at du har noen data i tabellen som er gått ut på dato. Som hvis du holder styr på folks navn og aldre, hvis noen er alder øker, deretter du kommer til å ønske å gå inn og oppdatere bare at personens alder. For et eksempel som fungerer med vår første table-- ikke bry deg om å skrive alle Disse kommandoene på samme tid. Men hvis du har fått oppdateringen ned, som vil være bra for denne delen, fordi vi kommer til å gå tilbake til bordet. Så hvis vi går tilbake til bordet, la oss si noe som skjedde var at det var et jordskjelv eller en feil linje som deles direkte gjennom New York City. Og vi ønsket å oppdatere alle som bodde i New York City. De måtte flytte til Pennsylvania. Det er ikke en hjemby. De måtte flytte til New Haven. Det vi går. Slik at alle i New York flytter til New Haven. Og så det er noe som er redigering av tre rader i denne tabellen. Men i SQL, kan du gjøre at i bare en uttalelse. Så vi går tilbake for å oppdatere. La meg raskt slette dette brettet igjen. Når vi snakker om oppdatering, det er noen deler av syntaks som er nøkkelen. Vel, alt av syntaksen nøkkelen. Men ting i grønt er valgfritt. Den hvite er nødvendig, som forhåndsdefinerte navn. Og den lyseblå er ting som varierer avhengig av bordet. Så det er hva som skjer med fargevalget her, der oppe. Så hvis vi ønsker å oppdatere bare de radene av folk som bor i New York, så hva vi skulle gjøre hvis vi sa UPDATE? Så tabellen er der vi legger navnet på vår bord. La oss bare si navnet av bordet vårt er bordet en. Så vi ønsker å oppdatere tabellen én. Og vi ønsker å set-- hva gjør vi ønsker å stille? Vel, vi ønsker å si, så column-- PHP behandler rader som unike identifikatorer. Og så kolonnene er de ulike feltene av disse elementer i databasen. Slik at det første element av databasen har et navn av Sam, supermakt av CS50, og en hjemby Milwaukee. Så hvis vi nevnte sett, la oss se på parametrene igjen at settet tar. Vi har kolonne lik verdi. Så vi ønsker å si noe column-- som husker er en field-- vi ønsker å se en feltet lik noe nytt. Så hvis vi bare sa oppdatering tabell 1, setter navn lik Elliot. Få noen folk fra ny seksjon med på dette. Men hvis vi bare gjorde oppdatering tabell 1 sette navn lik Elliot, hva ville tabellen ser ut etter det? Folk har noen ide? Yeah. PUBLIKUM: Alt i at rad skulle bli Elliot. SPEAKER: Alt i hvilken rad? PUBLIKUM: I den første raden. SPEAKER: I den første raden? Hvorfor den første raden? Jeg mener ikke å hakke på deg. PUBLIKUM: Kanskje alt i hele bordet? SPEAKER: Alt i hele tabellen, ja. Og det er helt riktig because-- jeg var bare å hjelpe deg ut litt det-- fordi vi utelatt tilleggs WHERE klausulen. Hvis du ikke har WHERE klausul, hva denne kommandoen vil gjøre er det vil fungere med alle enkelt rad i tabellen. Alles navn vil blir Elliott, i utgangspunktet, som Elliot er veldig fornøyd med. Eller Yanni, en av de to. Men alles navn vil endre seg. Så måten vi bruker WHERE clause-- og dette gjelder for alle de Wheres det er i hver av disse forskjellige ting. Så vil du legge merke til at SET har kolonne lik verdi. Og det gjør HVOR. Men disse er forskjellige typer utsagn. Så kolonnen lik verdi i SET er i oppdrag. Som vi sier vi vil ha å sette navn lik Elliot. Men i WHERE klausuler, disse er likestilling uttalelser. Så la oss si at vi bare ønsket å endre personens navn til Elliot hvis deres navn var Ryan, la oss si. Så når vi sier WHERE navn lik Ryan, som ville lykkes eneste endringen den name-- det ville bare endre navnet feltet i rader hvor navnefeltet er lik Ryan. Så hvis vi hadde flere folk heter Ryan, alle navnene deres ville endre til Elliot. Dette ligner eksempelet av hvis en feil linje deler New York City, og alle må flytte til New Haven, måten vi kan gjøre det i en uttalelse er UPDATE Tabell1 SET hjemby = New Haven hvor hjemby lik New York City. Dette er kraften i UPDATE-setningen. Vi kan velge hvilket som helst antall rader gjennom sanne påstander om feltene i disse radene. Vi kan ikke si UPDATE table1 sett name = Elliot WHERE rad = 1, bortsett fra at vi kan hvis vi sier ID = 1. Så vi kommer til å være arbeide med likestilling felt, likestilling mellom kolonner. Men ved hjelp av ID-feltet er en måte å velge individuelle rader spesifikt, fordi ID-feltet er et unikt identifikator i en SQL database. Så som å oppdatere rad én, tilsvarer ID 1. Oppdatering rad to, bare endre det ID-nummeret. Men kraften i HVOR uttalelsen er at vi kan oppdatere ting basert på hva deres gjeldende verdiene for visse ting er. Ja Elliot? PUBLIKUM: Og hva om du vil to-- igjen, dette er et annet spørsmål. Men mitt første spørsmål var: hvor skjer dette? Hvor skal jeg oppdatere denne? Er dette i et PHP-koden? SPEAKER: Hvor du oppdaterer, ja. Vi kommer til å snakke på hvor all denne skjer liksom når vi går gjennom alle kommandoer. Men det du trenger å vet for nå er i utgangspunktet at SQL database eksisterer som noe å få tilgang til spørringen funksjon, som CS50 definerer. Så hvis du bruker spørringen funksjon, du kan få tilgang til denne tabellen. Så du skal sende disse kommandoer til tabellen i PHP-filer gjennom spørrefunksjonen. Du kan også leke deg med bordet ditt direkte. Og det er den beste måten å teste disse slags kommandoer. Og vi vil gå gjennom nøyaktig hvordan å gjøre det med bare en liten bit. Så det er UPDATE kommando. Og resten av kommandoene kommer til å være liksom like, jobber med lignende ting. INSERT INTO er trolig den mest forskjellig fra UPDATE. Jeg kommer til å la det opp der for bare litt og arbeid over her. Så INSERT INTO, vil du se at bordet er fremdeles det samme. Du ønsker å sette inn. Kapitalisering, SQL er små bokstaver. Så du trenger ikke å kapitalisere disse tingene. Ved kongress, ordene i hvitt føres. Men jeg har også fargekodet dem. Den eneste grunnen til at du kapital de når du skriver dem er bare for å understreke at de er konstanter. Og så kan du heller se på kapitalisering eller det faktum at jeg har farget dem annerledes. Så vi har fått INSERT INTO, la oss gjøre Tabell1 igjen. Dette er alt på én linje. Jeg bare skille det fra de ulike uttalelser. Så ikke bekymre deg om det faktum at Tabell1 gjort det på den andre linjen. Så vi ønsker å sette inn INTO Tabell1 noen verdier. Og du vil merke den valgfrie bit, som jeg får til i et sekund. Så vi har fått VERDIER. Så la oss si at vi ønsker å legge til Andi til bordet vårt, fordi vi savner Andi. Andi er syk. Så la oss legge Andi til bordet vårt. Husk at ID-nummer oppdateres automatisk. Så de eneste feltene vi trenger å bekymre deg for er navn, supermakt, og hjemby. Og så den måten at vi gjør det, ser på vår syntaks, er vi har bare fikk en parentes, med komma adskilte verdier, som hver for seg er en verdi. Så hvis vi ønsket å sette Andi inn i vårt tabellen, er alt vi trenger å gjøre rett Andi. Hva er Andi supermakt, folk i Andi-delen? Hun liker fly, eller liker hastighet, eller noe. Hva gjør vi allerede har der oppe? Vi har CS50, fly, hurtighet og styrke. PUBLIKUM: Tidsreiser. SPEAKER: Tidsreiser, fantastisk. Så vi har fått Andi, tid reise, og hennes hjemby. Det er et veldig godt spørsmål. New York, med mindre noen vet. Alle er fra New York er den lærdom å ta unna i dag. Så dette utsagnet ville setter inn, som en femte rad, med supermakt tidsreiser og en hjemby New York City. Men valgfritt felt er i utgangspunktet en vei å spesifisere nøyaktig hvilke kolonner du ønsker å sette ting i. Måten vi gjør det nå, Andi, tidsreiser, New York kommer i den rekkefølgen av vår table-- navn, supermakt, hjembyen. Og hvis du ønsket å gjøre noe annet enn det, som sier at du ikke visste noens supermakt, som hvor jeg ikke visste Andis supermakt i begynnelsen. Så alt jeg visste var hennes navngi og hennes hjemby. Det jeg kan gjøre er jeg kunne do-- jeg skal slette denne raske. Jeg vil bare oppdatere kolonnene. Og det er her den valgfrie kolonneliste kommer inn i bildet. Jeg bare ønsker å oppdatere navn og hjemby. Og så vil jeg si VERDIER. Jeg skal gjøre Andi og New York City. Hvis jeg hadde utelatt listen over kolonner og bare gjort disse to tingene, hvor ville New York har gått? Hvilken kolonne ville New York Byen har blitt plassert i? Folk har noen ide? Supermakt, akkurat. Så dette vil bare gå i orden. Og når den når enden av listen, vil det bare stoppe å fylle ting i. Og de verdiene som det vil holde i alle kolonnene vil bare være NULL. Så fordi vi spesifisert navn og hjemby, vi kommer til å ha ID 5, nevne Andi, supermakt NULL. Så supermakt er en initialisert verdi. Du vil ikke nødvendigvis få samme Valgrind feil hvis du prøver og få tilgang til den. Alt vil bli pent nullet ut, fordi NULL er en verdi i SQL. Det er en konstant. Og så hjemby blir New York City. Så det er INSERT kommandoen INTO. Før vi går, er det to flere kommandoer. Har folk har spørsmål om UPDATE, om INSERT INTO, om SQL generelt før vi flytter på vår endelige bits? Folk føler seg bra, flott. Elsker det. Så la oss snakke om SELECT. Går grøft UPDATE over her. Og SELECT kommer til å være svært like. Målet med SELECT, VELG hensikt i livet er å gi deg en haug med kolonner som tilfredsstiller visse vilkår. Og når jeg sier tilfreds visse vilkår, hjernen din makt umiddelbart gå tilbake til at WHERE klausulen som kom opp i UPDATE. Og at klausulen er akkurat der i SELECT. Hvis vi ikke setter WHERE klausulen og vi sier SELECT navn, hometown-- stavet det litt wrong-- navn, hjemby Fra Tabell1. Hvis vi bare si det, hva VELG kommer til å gi oss er det er kommer til å gi oss en double-- et bord, heller. En dobbel matrise hvis vi er tenker på i PHP sanser. Men det er bare kommer til å gi oss en dobbel rekke på to columns-- navn, og hjemby. Og det vil ignorere ID. Og det vil ignorere supermakt. Og det vil bare gi oss hver enkelt rad av tabellen. Så hvis vi bare satt inn Andi, vil vi ha Andi. Og vi vil ha den opprinnelige fire. Hvis de har blitt oppdatert, vil det bli reflektert, et cetera, et cetera. Så dette er fordi vi fikk ikke bruke WHERE klausulen. Men vi kan bruke det på nøyaktig samme måte som vi har brukt det i oppdateringen. Hvis vi bare vil ha et bord av navnene og superkrefter av mennesker lever i New York, kan vi utføre en uttalelse som SELECT navn, superpower-- Jeg bare kommer til å forlate at-- FRA Tabell1 WHERE hjemby = New York City. Så dette går for å vise at du kan får helt forskjellige kolonner, og deretter sette kolonner som du ikke selv får tilbake i WHERE-leddet. Vi ønsker ikke selv den hjemby alle. Men vi vil at navnet og supermakt av mennesker hvis hjemby er New York City. Så det er noe vi kan gjøre med WHERE klausulen er at vi kan håndtere kolonner at vi ikke nødvendigvis ønsker tilbake. På samme måte i UPDATE, kan vi avtale med kolonner som gjør at vi ikke nødvendigvis vil oppdatere. Vi kan oppdatere byen alle som har navn er Sam, for eksempel. Vi kan oppdatere byen alle som har nummer ID er 2. Så bare oppdatere by på den andre raden hvor vi ikke trenger å forholde seg til nødvendig vanlig spørsmål. Og slett er, som du hadde forvente, DELETE FROM Tabell1. Og så har vi en annen WHERE-leddet. Så vi kan si WHERE ID = 1. Slett den første raden. Og DELETE vil alltid slette en rad, eller det vil slette noen antall rader. DELETE FROM tabell WHERE hjemby = New York by vil slette alle i New York City. Det er hvis det var en plutselig tragisk pesten og du bare ønsket å fjerne alle fra bordet som levde i en viss by som ble rammet av pesten. Må de hvile i fred. Dette er de fire SQL-kommandoer at du må bruke. Du trenger ikke engang kan bruke dem alle. Men disse er de fire at CS50 forventer du å være komfortabel med å gå inn både quiz 1 og også pset7 og pset8. Det er bare det at bordet igjen. I denne, har Roy supermakt blitt oppdatert til laserstråler som er et eksempel jeg bruker ikke. Jeg vet ikke hvilken som Roy foretrekker, men styrke. Roy har en supermakt på styrke. Katherine ikke gjøre det i dag. Det er uheldig. Men hun har super fart. Vel det var PHP. Før vi snakker om MVC, gjør noen som har spørsmål om PHP? Nå SQL, eller PHP hvis du plutselig har komme opp med et spørsmål om PHP? Flott. Greit, er vi alle satt da. Så snakker litt om Model View kontrollere, la oss gå tilbake til noen av ting i pset7. Så hva modellen visning kontrolleren er-- jeg er ikke kommer til å spare mine endringer for å logge inn fordi jeg helt slaktet den. Men i utgangspunktet har vi to separate ting skjer. Vi har en offentlig katalog som inneholder koden som kommer til å bli henrettet og nettsidene som vil bli besøkt. Og vi har også denne utsikten katalogen. Og utsikten inneholder maler. Dette er hva funksjonen render-- vi så gjengi funksjon i en haug av PHP-kode at CS50 har allerede skrevet for deg, som tar i visse parametre. Hva denne koden gjør er det kommer til oversikter, som er sett med like forhåndsskrevet HTML-kode, og det er å sette inn verdier inn enkelte steder. Dette er hvordan man når gå inn CS50 Finance, samme header er på hver side. Det samme bunnteksten på hver side. Dette er fordi den måten at gjengi verk er det vil automatisk oppdatering i at header og seer som du finner i utsikt. Vi kan faktisk gå inn i mål og se, det er en HTML-fil med et hode. Det har noen stilark. Du trenger ikke å se på CSS for pset7 hvis du ikke vil. Men du kan endre dem hvis du vil, gjøre din Finance ser litt annerledes. Det fikk noen PHP i overskriften litt for å se hvis det er en annen tittel det bør settes i denne spissen. Men bare noen andre scripts, og lenker, og andre ting. Hode slutter, kroppen begynner, og oops, vi har denne rare lille enden bit. Og det er en div, akkurat som en formløs slags element som har en idé om midten. Og så når vi ser bunntekst, Vi har i enden av en div. Vi har en bunn, som er hvor bunntekst er. Slutt på div, slutten av kroppen, slutten av HTML. Så hva gjør er gjør er å gjengi er liksom av patching opp header, en annerledes PHP-fil som vil inneholde de faktiske tingene som du vil vise, som tabellen over aksjer hvis du kjøper eller selger aksjer. Og så vil det legge i bunnteksten. Og modellen visning kontrolleren Tanken er at vi ønsker å skille hvordan ting ser fra koden. Det er vi ønsker å skille frontend og backend, der frontend er ting som brukeren ser, hyggelig visuals-- HTML, CSS, ting som det, bilder, et cetera. Og backend er PHP. Dette er koden du skriver. Det er der den koden som er gjør selve driften. Dette er når du legger til et lager i tabellen, når du kjøper og salg, det er backend. Og vi kan, som du så, inkludert PHP direkte i HTML. Så hva vi kunne ha gjort for dette oppdraget er nettopp hadde en HTML-fil for hver side, som innlogging. Og så på den siden, bare hadde en stor blokk med PHP-kode, inkludert alle koden som at siden spesifikt trenger. Og så kunne vi ha gjort det for porteføljen. Vi kunne ha gjort alle kjøp og salg innenfor de enkelte sidene. Men fordi vi er rende separat fra hvor vi skriver backend kode, kan vi lett endre hvordan ting ser uten endring hver enkelt fil. Vi gjør ting som å bare legge en ny div til bunnen of-- Hei Jeg endret bunnteksten. Du kan bare gjøre sånt. Men også, kan du endre hele visuell layout uten å påvirke hva som er går i backend. Og du kan endre Hele backend og fortsatt har det ser ut akkurat som det gjorde før. Dette Er ideen om modellen visning kontrolleren. Og det er faktisk en pålagt paradigme i noen av de programmeringsspråk kan det være lurt å bruke for endelig prosjekter. Hvis du gjør iOS utvikling, de har utsikt, som er det du ser på iPhone, og deretter backend som som en egen greie. Du kan tenke litt. Det er mye av binærfiler i informatikk, som er morsomt, fordi alt er i binær. Jeg hadde ikke tenkt det. Det var et ordspill utilsiktet. Ja, ordspill ikke ment. Men som .h filer og .c filer, det er mye skille ting som vi kanskje ikke trenger. Så vi kan bare redigere h filer, eller noen kan bare se en .h fil og vet nøyaktig de funksjoner som er i .c fil uten nødvendigvis å vite gjennomføringen. Denne ideen om separasjonskomponenter som er avhengige av hverandre men kan liksom få tilgang til hverandre gjennom ulike kanaler, bestått variabler, bare inkluderer uttalelser, ting sånn, dette prinsippet bidrar til å skape applikasjoner som kan være lettere redigert av flere personer, kan lettere endres eller modifisert på en stor skala, og er enklere å feilsøke på mange måter. Veldig rask, har jeg noen tips for pset7, som jeg skal gjøre full skjerm så du ikke bare se på the-- tips tips tippee. Det er ikke så mange tips. Men jeg nevnte PHP er vanskelig å feilsøke. Dobbel og trippel sjekke det. Hvis koden er bare ikke dukke opp på siden, det er nok en PHP-feil, beklager. Du trenger aldri å se på CSS hvis du ikke vil. Men når du er ferdig, kan det være en fin liten morsom ting å bare gå i og rote med CSS parametere. CSS og HTML er et eksempel på en modell view controller stil ting også, ikke sant? Du kunne ha stil tags innsiden av HTML-elementer. Men hvis du liksom outsourcing dem til CSS, de er enklere å redigere, og lek rundt med, og ha det gøy med. Unn CS50 helper fungerer som svarte bokser. Du trenger ikke å vite nøyaktig hva Pussing gjør, men stoler på det å alltid gjøre det rette ting, avhengig av hva du passerer den, ting som dette. Og jeg vil anbefale se Davids gjennomgang, gå gjennom alle ting, ikke bare de todos, men du virkelig kan behandle disse som svarte bokser. Ikke gå inn i disse funksjoner leter etter feil. Og velkommen tilbake av vår overherre Zamyla. Flott. Er det noen endelige spørsmål før vi liksom sprette for dagen? Er jeg fortsatt lever? Flott. Hei Livestream mennesker. Flott. Er det lenger spørsmål? Nei? Og så tror jeg vi er godt å gå for i dag. Jeg vil holde rundt litt etterpå hvis folk hadde spørsmål de var redd for å spørre på strømmen. Men ellers, ha en god dag.