SAM LEVATICH: Velkommen til sektion for denne uge. Jeg er ikke Andi. Andi er faldet syg denne dag, og jeg er slags kaldes i sidste øjeblik at overtage. Det er influenzasæson, så sørg for, at du opholder rent, vaske dine hænder, og spise sundt, så dig, også, ikke er sengeliggende. Men uden yderligere ståhej, lad os komme i gang. I dag, vi kommer til at tale om PHP lidt bit-- hvordan PHP vedrører HTML, hvordan det angår CSS, og nogle af banen ting du gjorde på den sidste opgave. Vi kommer til at tale et lidt om SQL og hvordan du kan arbejde med databaser, hvilket er en temmelig vigtig del af P sæt 8-- P sæt 7. P sæt 7. Og så vil vi tale lidt lidt om, hvordan se controllere arbejde og hvorfor det er en filosofi bag nogle moderne websider og anderledes design. Temmelig meget en masse typer af apps og programmer, du kan sende bruger denne model, view controller rammer, at du vil bruge i P sæt 7, så jeg vil snakke lidt om, hvorfor der er blevet populære, hvorfor det er vigtigt og rart. Og så vil jeg endelig gå videre til nogle tips om at tackle P sæt 7. Og hvis vi har tid tilovers ved udgangen, Vi kan faktisk gøre nogle arbejde på det sammen. Så PHP. Faktisk har du måske bemærket denne-- du ikke virkelig nødt til at dykke ned i det-- men P sæt 6 havde nogle PHP kode, som foregik. Og fordi PHP er en C-lignende sprog, PHP, i modsætning til HTML og CSS, er et programmeringssprog, mens HTML og CSS er statiske. De er kodesprog beskæftiger med stil og visuelle layout. PHP er den ægte vare. PHP har løkker, har det conditions-- alt det, der er sjovt om C. Det har et par ting, der er lidt smule bedre end C, som vi vil se, men jeg tror, ​​den nemmeste måde at tale om PHP er bare at dykke i. Så jeg har tænkt mig at gå ret i IDE på dette tidspunkt. Det første, vi skal at gøre er faktisk kigge lidt på nogle af de PHP kode, der var i P sæt 6. Så den måde, som vi gør at-- før, den måde, at vi kørte serveren for apparatet var, at vi ville have til at Motortype- enten bruge din implementering eller personale gennemførelse af server.c ved at gå ind i mappen og kører server.c med enten ingen arguments-- så bare kalde det på lokal vært, hvilket er, hvad du sandsynligvis gjorde de fleste af time-- og derefter fodre den en directory-- med at bruge som sin rod hvor hjemmesiden ville være kørt, dybest set. Denne uge for P sæt 7, som stor som vores kode til server.c er, der er mennesker, der allerede har skrevet disse fine ting over på CS50 der har lidt mere funktionalitet, en server program, der er i stand til at behandle med lidt mere af de snørklede, som vi vil se i både P sæt 7 og P sæt 8. Og den måde, at du starter op server er ved blot at skrive, "apache50." Og før du gør noget, du vil være sikker på at Apache 50 ikke er allerede kører, som det er på min maskine, som jeg gjorde for at teste det. Og du gøre det ved at kalde apache50. Stop, og du vil se, at det stopper webserveren, hvis du kan se der nederst terminalvinduet. Og så bare at starte, vi er vil kalde, "apache50 starte." Og så vil vi at fodre den en mappe. Nu, fordi vi ønsker at se på nogle af P sæt 6 kode at vi havde gennemført, jeg faktisk kopieret en lille smule af P sæt 6 kode ind i min egen mappe, som du kan se på venstre der. Det hedder "SECTION8" i alle store bogstaver fordi jeg er lige så spændt at være levende streamet i dag. Så hvis vi køre dette, bør det alle arbejder temmelig effektivt. Den siger, OK, vores hjemmeside er nu findes på adressen på IDE, dybest set, hvilket er, hvad du brugte præcis som det var i P sæt 7-- P sæt 6. Alle mine indekser er en indeks i dag. Så vi kan gå til at adresse, hvis du vil huske, ved blot at klikke på dette lille knappen i øverste højre. Og du vil huske denne kode, som skete, da du gik ind i hello.php. Og hvad koden er designet til at gøre, er, når du har skrevet et navn her-- hvis du siger Sam fordi det er min name-- og jeg klikker Say Hello, når Vi gik til den næste side, dette navn skulle blive vist. Det vil sige, "Hej, Sam" eller "Hej," uanset navn, du lagt i det, selvom vi gik til en helt ny webside. Og dette er den slags ting at PHP kan gøre for dig. PHP er i stand til at sende data mellem to websider. Dette er en helt anden side. Du vil se titlen er "hello" her. Faktisk har de samme titel, men jeg lover de er forskellige web sider, hvis vi ser på kilden. Og du kan passere de data, der er indtastes i dette tekstfelt, du sender det til det næste side, der bliver kaldt op, og så, at data er i stand til at være der i sin nuværende form. Nu er vi endnu ikke har gennemført dette selv, som er, hvad vi vil gøre lige nu til sortering få en smag for, hvordan PHP fungerer, men den centrale idé er, at PHP-- du kan slags tænker på det som en funktion. Noget, som PHP kan lade dig do er det kan tage parametre at du input til en HTML-side ved brug af PHP og former, og det kan passere dem som parametre til den næste side, at det indlæses op. I dette tilfælde, vi laste op denne side med knappen "Sig hej". Men for nu, jeg faktisk slettet nogle af denne kode i hello.php der blev kørt der rent faktisk var at vise "Hej, verden "eller" hej, Sam "eller "Hej," uanset var bare input. Så for lige nu, er vi vil gøre det, dybest set. Vi kommer til at genskabe det, og også tilføje nogle flere funktioner, gøre en lille smule mere med det, se hvad PHP er virkelig i stand til. Så først, lad os tale om denne fil, hello.php. Så hvis vi zoomer ind et lidt bit-- og nu er jeg slags forsøger at rulle alle den måde around-- der vi går. Du vil se det hedder hello.php, men syntaksen i det ligner en HTML-fil. Dette skyldes, at faktiske PHP i denne fil er alle fast mellem disse Spørgsmålstegn-Caret blokke. Alt lige her anses PHP kode. Og du vil opdage, at da jeg gjorde en kommentar, vil du se det velkendte to skråstreger. Og hvis du vil huske, i HTML, hvis jeg skriver en kommentar, det ser noget tættere på dette, hvilket er en kommentar i HTML. Så virkelig alt mellem disse to vinkelbeslag nu PHP kode, som afspejles i det faktum, at denne lille kommentar symbol er forvandlet til en kommentar. Så hver gang du skriver PHP kode, selv hvis der ikke er HTML-kode uden for det, det altid vil være indesluttet i disse vinkelbeslag med spørgsmålstegn. Du kan slags tænker over det-- hvordan alle af den kode, der kørte i din C-programmer blev lukket inde i en int main, ugyldig, krøllet tandbøjle, ende krøllet tandbøjle erklæring. Og du vil se krøllede parenteser i PHP, også, men dette er slags Ligesom den vigtigste metode til PHP. Så nu, hvordan gør vi noget i PHP? Nu, PHP er et programmeringssprog sprog, der er meget C-lignende, men det fungerer på nettet. Så én ting, vil du immediately-- en af de første ting, du virkelig gjorde med C blev du udskrev ting ud, ikke? Så i C vi gjorde det med en printf funktion. Vi gav det en streng, formentlig med en ny linje, og så har vi afsluttet den med et semikolon. Så den måde, at vi kommer til at gøre det i PHP-- fordi det ikke er helt printf. Det er en lille smule anderledes syntaks. Den måde, som vi udskriver tingene ud i PHP er vi siger, "echo hej" eller "echo" ethvert ord. Og som har den virkning at gøre printf med en snor, "Hej." Og det tilføjer den nye linje til det. Så lad os lige nu gøre sure-- Jeg vil zoome ud igen lidt bit-- lad os sørge for, at at koden virker fordi der kan meget vel være en fejl i denne kode at vi bliver nødt til at tackle. Så serveren allerede kører. Så hvis vi rulle tilbage ned til bunden, Yup, er serveren stadig kører. Så hvis vi bare trykke på denne lidt lige her-- welcome-- skal vi get-- stor. Vi stadig har den velkendte "Sig hej" dialog, men når jeg skriver i "hej," vi vil se at teksten "hello" var faktisk printes ud, hvilket er præcis, som vi forventet, fordi echo i PHP er ligesom en printf erklæring. Så tilbage til den kode, hvordan i P sæt 6 gjorde du leveres distributionen koden gøre det så PHP ville output den ting, som du skrevet i den forrige skærm? Og for at slags undersøge hvorfor det sker, er vi gå i index.html, som er den oprindelige fil, den fil, dukker op på denne skærm med knappen "Sig hej". Du bemærker, at der er alle de klassiske ting vi er kommet til at forvente fra HTML sådan som disse ting, disse tags vedlagt i vinkelbeslag, som PHP men uden de spørgsmålstegn, hvilket indikerer en speciel ting til HTML. Vi har titel, som er "hej." Og du vil opdage, at som vi så, Titlen er "hej" i begge tilfælde. Lad os ændre denne ene til "sige" bare så vi kan skelne os selv, hvor vi er. Men vi har en krop. Og derefter den interessante bit, bit, der dukker op i HTML, er denne formular element. Og så vi har fået en formular. Og det er nøglen. Dette er, hvordan vi arbejder med PHP. Handlingen parameter formular siger, at hello.php er, hvad vi kommer til at sende værdierne i denne formular til. Det er her, vi passerer parametrene, så at sige. Du vil opdage en anden ting her er, at metoden er "får." Der er to primære metoder, som vil være ved hjælp af PHP til at videregive oplysninger mellem websites-- websider, rather-- i denne opgave. Og disse metoder er "få" og "post". Der er nogle subtile forskelle mellem get og post at vi får into-- vi vil "komme" ind, hvis du vil. Men for alle virkeligheden og formål, får og post er begge kun måder, du passerer parametre med lidt forskellige udførelser. For nu, vi kommer til at bruge få, fordi få var hvad der blev brugt oprindeligt i PHP-filen P sæt 6. Og faktisk, hvis vi går ind og ser før vi har redigeret noget andet, Jeg har tænkt mig at sige hej at-- hvad er dit navn? PUBLIKUM: Elliot. SAM LEVATICH: Åh, gosh. Jeg ved ikke, hvordan man staver det. Kan du stave det for mig? Målgruppe: E-L-L-I-O-T. SAM LEVATICH: I-O-T? Publikum: Ja. SAM LEVATICH: Perfekt. OK. Jeg tror jeg gjorde ved, hvordan man staver det. Undskyld. Men hvis vi siger "Sig goddag," det er ikke det kommer ikke til at dukke op på skærmen endnu, fordi vi ændret koden en lille smule. Men hvis vi gør "Sig hej" - OK, så "hello" er her. Men hvis vi tager et nærmere se på URL selv, Vi vil se, at det ender med hello.php? name = Elliot. Så det er en måde at kommunikere til den næste webside de parametre, vi har passeret. Vi sagde name = Elliot. Og det er i sidste ende, hvordan P sæt 6 adgang variablen, som vi passerede i via formularen. Og det er noget, er særegne for en GET-anmodning. En GET anmodning gør parametrene kendt i webadressen på hjemmesiden. Og du vil huske, også, i P sæt 6, at du havde til at skrive en funktion at behandlet med det faktum at denne forespørgselsstrengen kunne eksistere efter en fil. Der kunne være et spørgsmålstegn, efterfulgt ved dybest set et vilkårligt antal tegn. Og det er præcis, hvad der foregår her. Og grunden til at du var nødt til at fortolke det i din implementering af server.c i P sæt 6 er, så du kunne fortælle PHP kode, name = Elliot. Du behov for at være i stand til parse, at ud af URL'en således at PHP pågældende fil vidste, hvad det var med at gøre. Så forhåbentlig dette giver motivationen til at server.c nu, at vi går videre uden for C i PHP. Så lad os faktisk fokusere på at få adgang til ting passeret gennem en GET-anmodning nu på dette tidspunkt. Jeg har tænkt mig at gemme denne. Vi ændrede ikke noget. Det ser ud som vi har fået et input felt. Vi sætte nogle egenskaber, som vi kan gøre en HTML. Disse er simple ting. Vi har ikke brug for disse. Men vi har fået autofuldførelse fra, som dybest set says-- du ved, når du skriver ting ind i banen, til tider den forsøger at udfylde det i for dig. Så det er en dejlig ting. Vi ønsker at slå det fra til dette formål. Det var en CS50 beslutning. Så vi kan slette, at hvis vi ønskede. Autofokus bare stikker markøren i form lige i starten. Igen, ikke alt for vigtigt. Men name = "navn" - det er lidt vanskelig, fordi det er navn og navn. Men vi kunne har ændret dette til noget andet. Og i virkeligheden, det er hvad vi vil gøre lige nu. Vi vil sige "person", som er lidt ligesom navn hvis en person er defineret ved deres navn. Så lad os lukke denne, genåbne vores hjemmeside da vores server kører stadig Apache 50, og vi vil sige, hej, her er Elliot igen. Hvorfor ikke? Hej. Og hvis vi går op her, vil vi se så i stedet for name = Elliot, det siger personen = Elliot. Og det er et direkte resultat af det faktum, at vi netop ændret navn = "person." Så i et input element en HTML-formular, navnet feltet er identifikator for den parameter, der bliver passeret. Det er ligesom, hvis du opretter en funktion "tilføj", der tog i to heltal og du sagde int a og int b. Det ville være navn a, og hvis du ønskede en anden form, som vi kan gøre bare ved kopiering og indsætte, så ville vi have navn b. Så nu vil vi have to parametre der bliver ført gennem komme til den næste website-- den næste webside, hello.php. Og vi kan faktisk se der igen, hvis vi vil. Dette er den nemmeste måde at håndtere web kode i IDE, dybest set. Du starter op på serveren, få det kører, og derefter hver gang du foretage nogle ændringer, bare tæt at filen bare for at være sikker. Ved at trykke på knappen igen er lidt tricky fordi det kan indlæse en tidligere udgave, ikke den mest opdaterede én. Og så skal du bare klikke på din knappen igen, pop lige up-- åh, og nu er der to former. Og så hvis vi skriver en ting i hver en-- "Jason Hirshhorn," for instance-- vi siger hej. Vi ser op på vores parametre. Det ser ud som vi har fået, som forventet, a = Jason og b = Hirshhorn, som repræsenterer de to parametre at vi passeret denne funktion. Så lad os nu rent faktisk komme til gennemførelse af denne funktionalitet, vi havde i P sæt 6. Så lige nu er vi bare ekko hej. Og det er ikke meget nyttig. Vi ønsker at gentage nogle variabel der blev videregivet til os. Og vi kender navnet på denne variabel. Vi har en, og vi har f. Så vi kunne vælge at gentage enten en. Men hvordan kan vi få adgang til det? Nå, der er sikker globale variabler i PHP. Og jeg har tænkt mig at skrive dem i kommentarer her. De to vigtigste er get og bogføre til vores formål lige nu. Det er de arrays eller, Teknisk set ordbøger hvor vores variabler, vi er gå videre til næste webside levende. Og vi skal snart se, hvordan man bruger dem. En anden korte bemærkning om PHP kode og nogle detaljerne i det-- i C, at erklære en variabel eller at anvende variable, du først nødt til at erklære dem. Og hvad du havde at gøre, når du erklærede dem var sige int a eller char b. Du havde at erklære de typer af disse variabler, før du har oprettet dem. PHP-- du behøver ikke at gøre noget af det. PHP ikke bede om typen af ​​variabel. Og den måde, som du skabe en variable-- stedet end at sige int, char, string-- som er virkelig char *, som vi know-- snarere end at gøre alle at, fordi alt er af den samme type, typeløse, kan vi bare bruge et tegn, der er dollartegn. Og du vil se det er allerede popping op, små autocomplete ting. Og det er at sige, at _GET og _POST er to muligheder, som jeg har til rådighed til mig. Nogle af disse andre ting er andre globale variabler i PHP at du skal bruge i løbet af løbet af P sæt 7. For nu vil vi fokus på get og post. Men det er et nyttigt ting, at IDE gør hvor når du har indtastet i denne dollartegn, det vil begynde at udfylde globale variabler eller variabler, du allerede har defineret. Så hvis du ønsker at definere en variabel kaldet "streng" du bare kunne sætte den lig med "hej". Og det er dybest set så simpelt er det. Og så vi kunne gøre noget lignende "echo $ streng." IDE-enheden skal smide nogle fejl, hvis jeg gør noget forkert, så forhåbentlig jeg gør alt rigtigt. Men bugs altid vil opstå. En anden tricky ting ved PHP er, at det ikke er kompileret. Så med C-programmer, ville du gøre den daglige rutine of-- dybest set, du ville gøre redigeringer til din kode, ville du gemme det, og så ville du gøre det, hvor make var det trin, der kaldes compiler, clang, for at gøre din kode, denne tekst fil, i en eksekverbar. PHP er C-lignende, men det er henrettet om flyve med din web-browser. Så der er ingen måde at vide. Gøre ville smide dem nyttige fejl, ikke? Det ville være ligesom, du ikke erklære denne variabel før du forsøgte at bruge den. Du gjorde alt dette dårlige stuff-- segmenteringsfejl, segmenteringsfejl, alle den slags sjov gange der fulgte med make. PHP er et tveægget sværd fordi du ikke vil få disse fejl, men det betyder også, at du ikke vil vide virkelig, hvad er der galt med dit program hvis du bare køre det, og det virker ikke. Men debugger bør påpege nogle forhåbentlig nyttige små ting syntaktisk, at du kan løse. Så nu, hvis vi gå over at-- sige, lad os lukke det. Genåbne. Og vi er tilbage til her. Så vi har fået en variabel og en variabel b. Og disse vil i sidste ende ikke noget. Vi kalder dem h og g uden særlig grund. Og vi siger goddag. Nu ser det ud til vores snor "Hej" er faktisk udskrivning. Vi skabte en variabel kaldet "streng", sæt den lig med "hej". Bemærk, at vi ikke har at gøre malloc eller gøre et tegn array. I PHP, fordi variabler er typeløse, en streng er det samme som en char for alle henseender. Dette kunne være "Hej." Det kunne være lige tegnet k. Dette kan være et tal fra 1. Og det er ligeglad. PHP er ligeglad typen af ​​din variabel. Eller det gør pleje. Det bekymrer, når du prøver og gøre ting med det, men det gør ikke pleje i trinnet erklæring. Og ligesom du kan i C, kan du erklære strenge på stakken som denne selvom at sige "stak" er lidt Lidt af en potentiel misvisende, når vi taler om PHP. Men vi behøver ikke at bekymre dig om det. Så vi fik vores snor "Hej," og vi echo streng. Så nu har vi diskuteret variabler. Så nu er vi nødt til at tale om get og skrive og udføre den sidste ting, der er nødvendig for virkelig at få dette tilbage op til funktionaliteten af ​​P sæt 6. Så lige nu er vi ekko strengen, men vi har disse variabler får og post. Og fordi vi bruger fremgangsmåden får det synes naturligt, at vores variabel, Vi er interesseret i både a og b, vil blive placeret i arrayet eller ordbog, teknisk få. Så hvis vi oprettet komme som denne med din groups-- jeg trykkede ind og det kunne ikke lide det-- men her har vi får. Og så får allerede eksisterer. Så kan vi allerede begynde at få adgang nogle af elementerne i get. Hvis vi får, denne syntaks for arrays i PHP er meget C-lignende. Vi har vores to firkantede parenteser. Så hvis vi siger få i en normal array, kunne vi få adgang nulte indeks, første indeks. PHP er nul indeks. Vi kunne sige nul, en, to-- ting som dette. Og jeg har at sige, at få er teknisk en ordbog. Så hvad PHP gør under kølerhjelmen, som er en lille smule pænere end C, er det allerede giver dig nogle ordbog funktionalitet, som er virkelig hash tabeller, eller forsøger at, angiveligt. Eller, det teknisk kunne være en prøve så godt. Men PHP er ved at gennemføre en hash tabel, som danner en effektiv ordbog. Og så vi kender navnet af vores variable, ikke? Det bliver vedtaget i søgestrengen af ​​PHP. Vi har a = h og b = g hvor og b er navnene på de variabler. Så den måde, at vi kan få adgang til værdi, der svarer til tasten i vores ordbog er bare ved at sige _GET_GET ["a"]. Så nu har vi _GET ["a"]. Og hvis vi bare erstatte inde vores ekko, hvis vi echo _GET_GET ["a"] - og vi vil se, om debugger kaster eventuelle fejl om denne-- Vi vil spare det, og lukke det ud. Åbne det op. Så vi bare gør en ret nu, så b bør ikke noget. "hende" og "ham" - "brummen". "hende" og "brummen". Lyder godt. Og det udskrives "hende", som er vanvittigt. Men det er præcis, hvad foregik i P sæt 6. Dybest set, hvad P sæt 6 var doing-- echo hej, name-- hvor det havde en variabelnavn og det bare beder dig om at indtaste den smule tekst. Der var også nogle tillægskode hvor det medtages, hvis udsagn, som vi kan gøre lige nu. Vi kan sige, hvis der eksisterer, som er en funktionalitet i PHP, _GET Med underscore, "navn" - der dybest set siger, "Hvis navn er blevet udfyldt", fordi vi kunne have netop klikket på knappen at indsende form uden skrive noget ind i dette område. Og vi wrap at i vores venlige krøllede parenteser. Vi kan have en anden erklæring. Og det er alle inden for PHP vinkel beslag, spørgsmålstegn, vinkel beslag, hvis du vil. Og nu vil vi se, om det virker. Jeg bliver ved at vente på det til debug og crap ud på mig, dybest set, men det har endnu ikke. Måske vil det nu fordi jeg talte om. Ja. Det gjorde, faktisk. Så, intet viser op. Det er på grund af noget galt at jeg skrev i PHP-kode. Og jeg nævnte debugging er vanskelig, fordi i PHP, vi ikke kompilere det på forhånd og oversætteren var ikke som, her er, hvor dine fejl er. Men hvad vi kan gøre is-- gøre folk husker hvordan man ser på de forskellige netværk anmoder om, at PHP-- eller at hjemmesider sende? [? Malin?] Gjorde dette i foredrag én eller to gange. Du husker, hvor vi gå for at finde de forskellige gæld og 200 oks, alle disse koder, der bliver sendt via HTTP fra webside til webside? Er der nogen der kan huske hvor vi går til at gøre det? PUBLIKUM: Side Source. SAM LEVATICH: Side kilde. Nøjagtig. Hvis du går til side Source-- perfekt. Så Side Kilde trækker op inspektøren. Og jeg bruger Safari. En masse af jer vil formentlig være bruger Chrome eller Firefox. Men så længe du er i enhver moderne browser-- og velkommen til at følge sammen, hvis du ønsker. Du kan skrive op denne kode eller bare se inde i P-sæt 6 bibliotek for nogle lignende ting. hello.php er, hvad vi er arbejder i øjeblikket på at efterligne. Så der er en række faner. Vi kan se på alle de ressourcer. Vi kan se kildekoden. Så ligner det ikke gjorde komme forbi krop i sidste ende. Det fundet en fejl i PHP, og det holdt op med indlæsning af hele websiden. Vi har ikke engang en ende tag for HTML eller noget. Og hvis vi ser på nettet, vi kan se, at vi bliver sendt en anmodning. Dette er domænet. Dette er adressen. Det er et dokument. Vi bruger get-metoden. Og det er rødt. Eller, det blev rødt, når jeg var ikke vælge den. Hvordan kan jeg fravælge det? Nå, det var rødt. Lad mig genopfriske. Der er det. Nu er det rødt. Så det er rød, hvilket betyder det mislykkedes, hvilket er dårligt. Så lad os undersøge, hvorfor det gjorde mislykkes. Så alt, Sidekilde kan dybest set fortælle dig er dine ting virkede ikke, som vi allerede kan se. Så ideelt set ville der være et mere nyttigt redskab. Og der er nogle browserudvidelser der tillader dig at debug PHP, men vi kommer ikke til at skrive et ton af PHP, så det er nok bare bedst til at se gennem din kode omhyggeligt og bare sørge for, at det er ikke at gøre noget andet. Så lad os se om formatet af denne hvis erklæring er, hvor problemet er. Jeg ønsker at indlæse den tilbage op her. Hej hej. Så der er et problem der. Så for korrekte syntaks af PHP, er PHP går at være C-lignende i at du vil se sløjfer. Du vil se, hvis udsagn. Du kan se alle disse venner at du er blevet fortrolig med i løbet af denne CS50 semester. Men den bedste måde at finde ud af at gøre noget i PHP er at Google det eller til at se på nogle eksempler på PHP kode fordi du kender funktionaliteten. Du ved, hvad du kan gøre med programmet. Du kan sløjfe. Du kan loop så mange gange som du ønsker. Du kan løkke i alt mulige forskellige måder. Du kan oprette funktioner. Du kan oprette funktioner, som ringe til andre funktioner, funktioner at kalde sig. Og du har navne for disse begreber. Du har rekursion, sløjfer, hvis andre kontrolforanstaltninger strømme. Og så Google er din bedste ven. Selv siger, "PHP hvis udsagnet "og der ll være tonsvis af stillinger med svar på andre mennesker der har haft lignende spørgsmål til dig, der lige er startet ud med PHP og er nysgerrig omkring en syntaks ting. Fordi vi har den luksus at være stand til at se på koden i P-sæt 6, vi faktisk træk den op og se, at OK, her er noget interessant. Så dette er, hvad det egentlig lignede i P sæt 6. Så hvis vi går gennem denne, Vi kan se, at vi har fik flere af disse lidt PHP-lignende spørgsmålstegn bits. Og der er ikke krøllede parenteser. Der er koloner. Og der er krøllet seler i PHP, men dette er et format og en måde at gøre PHP, der fungerer godt med HTML fordi som vil du se, vi lukker off disse PHP bits-- den andens og hvis'er og alle at-- og derefter vi indflette HTML inde i dem mens den stadig efter kontrol flow fastsat af PHP. Så jeg vil blot hurtig gåtur gennem denne fordi det er en masse af de samme begreber, som vi gjorde før. Vi har fået, hvis ikke tom, parenteser, _GET_GET ["navn"]. Dette er alle de samme ting. Vi bruger den _GET ordbog, PHP sender på anmodning af formularer, fordi det er parametrene for handling, og metoden er at få. Og derefter der ender det. Den kolon er en signifier at bare gøre det hvis hvis udsagn evalueres til sand. Det er ligesom en krøllet tandbøjle. Og i virkeligheden er det en krøllet klammeparentes på andre sprog som Python, som du kan støde på, hvis du bare gøre det for din endelige projekt. Og så er denne linje, hej. Så har vi denne underlige ting. Vi har flere konsoller. Der er ingen HTTP there-- eller PHP, undskyld. Men der er et lighedstegn. Og så har vi en funktion, htmlspecialchars (_GEThtmlspecialchars (_GET ["navn"]). Det er lidt ligesom en mere avanceret version af ekko. Ligesom vi havde ekko som en måde at udskrive tingene ud i PHP. Dette er en funktion, der er defineret i PHP, der vil beskæftige sig med nogle mere væmmeligt tegn og byte værdier at du kunne passere det. Det er altid sikrest at bruge dette. Men ekko vil gøre arbejdet bare fint, hvis vi ikke er beskæftiger sig med noget alt for grim. Og så dette har den samme virkning dybest set, denne ting i mellem spørgsmålet varemærker evalueres ved PHP. htmlspecialchars returnerer en dejlig HTML trykt værdi _GET_GET ["navn"], dvs. uanset hvad vi har skrevet i form. Og så er det vil sige hej, komma plads, og så det. Det hele mellem vinkelbeslagene vil blive erstattet af hvad htmlspecialchars lægger ud. Så det er dybest set ens til, hvad vi laver. Og vi har en anden sætning, der er hej verden, hvilket giver mening. Så lad os nu gå tilbage til vores kode og se exactly-- åh. Jeg sagde eksisterer, som ikke er en ting, vi ønskede at gøre. Vi ønskede at sige ikke er tom. Og så dette bør arbejde lidt lidt bedre, ikke tom _GET_GET ["navn"]. Og det krøllede klammeparentes matcher det krøllede klammeparentes. Vi har fået vores krøllede parenteser her. echo hej _GET ["navn"]. Lad os se, om det fungerer lidt bedre. Vi kører stadig vores server. Hej Jason. Hej Jason. Og det virkede denne gang. Og så det er et bevis at du kan faktisk anvende de krøllede parenteser, som du kender og elsker i PHP kode i HTML. PHP kode leveres til dig i pset 6-- pset 6-- tilvejebringer en anden måde at gøre det samme. Så nu har vi magten. Vi har funktionalitet til at gennemføre PHP kode som vi så i pset 6 af os selv, dybest set. Før jeg går videre, hvad er nogle af de spørgsmål, du har på dette punkt? Ja [uhørligt]. PUBLIKUM: Så i den affattelse pset6, når du kører det, er der et mellemrum. Og jeg kan se, hvor pladsen er efter kommaet. [Uhørligt] starten den åbne beslag. Hvordan optage plads i den måde, du skrev dine egne koder? SPEAKER: Det er et godt spørgsmål. Og så lad os finde ud af. Så det er en rigtig godt spørgsmål og en, som jeg ikke overveje. Men lad os gøre det sammen. Så først og fremmest, hvad Jeg gør med ekko er, når vi bare echo hej, det output hej. Hvis vi echo nu dette får på en separat linje, lad os undersøge, hvad der sker. Så vi klikker på dette. Vi holde siger, Hej Jason. Så igen, har vi ikke denne plads. Og det er fordi, i PHP, når vi har ekko, uanset hvor mange spaces-- nej, ikke den V-- uanset hvor mange pladser vi sætte i her-- hvis vi nu indlæse det op igen, Hej Jason. Ja, se, alle de mellemrum fik spist op. Og det er noget, ekko-funktionen gør. Så for at tage sig af at rummet, og det er en af ​​grundene hvorfor du ikke bruger echo og du bruger htmlspecialchars stedet. Jeg er nysgerrig, hvad ville ske, hvis vi gjorde dette hvor vi lukkede et rum i en streng. Jeg er ærlig talt ikke sikker på hvad vil ske, når jeg gør dette. Så det er én måde. Det er én måde at tage sig af det. Hvis du ruller plads i en streng, så rummet vil blive udsendt pænt ved ekko. Den sikreste ting at gøre, er at gøre htmlspecialchars. Det er altid en sikker satsning. Men nu har vi en måde at gøre det med ekko, hvis nødvendigt. Og på samme måde, kan vi ekko nye linjer, alle den slags ting du er fortrolig gør i PHP. Nogen anden, hvad er mere spørgsmål, som andre mennesker har på dette punkt om PHP? Hvis folk dukkede op lidt sent, Jeg er glad for at bo efter en lille smule og tale om nogle af begyndelsen. Og det er også alle livestreamet, og arkiveres, hvilket er vanvittigt. Alligevel, så lad os nu gøre nogle mere avancerede ting med PHP. Og en af ​​de tidligste ting, du blev indført i C var efter sløjfer. Og PHP har en mere kraftfuld for loop kaldes foreach loop. Og det ser ud som denne-- for hver tomme som blanke, krøllede parenteser, skal du gøre noget. Så dette er dybest set en stenografi. Se, for-løkken som en syntaktiske konstruktion blev udtænkt i C og i montage sprog og tingene kan lide. Udarbejdet i C, netop som en forkortelse for en masse af de typer af loops at folk ville se. Ligesom når du skrev en løkke, der ofte var et initialiseringstrin henrettet lige i begyndelsen, en tilstand, hvor sløjfen ville stop-- og det er den funktion det er bare i en while-løkke, eller at et stykke har præcis bare, at feature-- og derefter en optælling skridt i slutningen. Og så ville du ofte finde dig selv skrive kode som følgende. Jeg har tænkt mig at slette noget af dette. Men hvis vi iteration gennem tegn i et array, for eksempel, som vi har fik en matrix af tegn. Ked af at bringe tilbage C. jeg kender, du troede du var færdig. Men det er kun med henblik at lære PHP, lover jeg. Så hvis du fik en char str længde 8, og lad os sige det siger Hellooo med et efterfølgende nul. Stor, så det er vores streng. Og så havde vi en for-løkke. Vi har int i er lig med 0. Og vi ønsker at afslutte, når st af jeg svarer ikke lig med nul, fordi vi afslutter, når det er lig nul. Og så gør vi i ++ ved hvert punkt i for-løkken. At gøre noget med str af i. Så basisformuleringen var, vi havde denne matrix, som vi ønskede at behandle som separate elementer. Men hvad vi havde at gøre, er vi måtte dybest set oprette en separat heltal variabel, der blev tælle op hver gang vi gik gennem løkken. Og så ville vi nødt til derefter kalde strstr [i], når det, vi virkelig ønskede at gøre er bare gå karakter ved karakter, ikke? Vi ønsker ikke at forøge en heltal og derefter bruge det heltal at få adgang til hvert tegn individuelt. Vi virkelig ønsker tegn for tegn. Og så for hver intelligent beregnet, at for os. Hvis vi har et array, som Vi kan erklære i PHP som bare-- hvis vi har en variabel kaldes, lad os kalde det array. Mirakler ingen skrive, er det ligesom enhver anden variabel. Det er bare et array. Og vi har en lille [uhørligt] gerne 1, 2, 3, blot en slags initialiseret array. Det er OK, betyder det ikke lide min foreach. Men hvis vi foreach-- faktisk Jeg har skrevet, at en lidt forkert. Der er to måder at gøre en foreach løkke. Der er den i syntaks og som syntaks. Og vi vil gøre i syntaks første, ikke som. Det er min fejl. Så foreach num i array, ekko num. Og PHP er råben på mig en eller anden grund. Det er at finde en uventet i i noget, som er en lille smule af en ærgrelser. Men vi vil finde ud af hvorfor der er i et øjeblik. Så ikke lide det. Lad os prøve at bruge som. Den foretrækker den som syntaks er ser ud. Så lad os gøre foreach array som num. Så lidt forklaring af, hvad der lige er sket er da syntaksen er saying-- godt først, lad os se på, hvad det udskrives. Så vi åbner vores IDE. Vi går her. Vi siger, Hej Jason. Og det gjorde 123, som var indholdet af array, som vi skabte op øverst. Så dykning i denne foreach loop, vi har en variabel kaldet matrix som er en opstilling af tre tal. Og så gør vi foreach array som num, ekko num. Og det er mere intuitivt end en for lop. Vi siger, behandling hver af de ting i array som num, Jeg vil have dig til at give mig num. Og det er præcis, hvad det gør. PHP er at beregne, at når du siger foreach array, og du har at gøre med en vifte, hvad du vil ønsker at gentage over er tegnene i den matrix, er int'er i den opstilling, er elementerne i denne matrix. Og det er at lade dig gemme disse variabler som num, og så bare output num højre væk snarere end at sige, Jeg har en variabel kaldet i, og så jeg ønsker at output strstr [i]. Og så giver os mulighed for at gøre seje ting. Ligesom stort set har vi ikke at skabe disse variabler som i'er og gøre alt denne optælling ting i slutningen. PHP tager sig af alt dette for dig. Så lad os nu snakke om foreach som det gælder for vores _GET ordbog. Så vi vil kommentere dette ud hurtigt. Så vi har vores _GET array. Vi har denne variabel. Og det har fået nogle ting i det. Lige nu har vi kun én variabel gives videre til det, som er navnet. Men hvis vi på Enter, nu vi kan have to variabler. Vi kan have navn og alder, for eksempel, hvis vi ønsker at få alder og også navnet på en person, sjovt nok. Så nu _GET bliver en ordbog med to elementer, med to centrale værdipar. Og den første key-- jeg vil skrive denne ene op på brættet også. Vi har vores ordbog er _GET. Beklager, det er er lidt svært at se. Men inde i vores ordbog, vi har navn, som kommer til at være noget at vi er givet. Og vi vil have alder, som også er kommer til at være noget, som vi er givet. Og det er i sin helhed af vores ordbog. Så det har fået to elementer i det. Og så fordi foreach loops er smart, vi måske tror, ​​og korrekt tror måske, at foreach kan gentage gennem dette ordbog, udskrive værdierne ved navn og alder. Så lad os i virkeligheden gøre netop det. Lad os konstruere en foreach løkke. Og vi vil gøre for _GET som. Og vi vil gøre følgende. Så lad os se hvad der sker, hvis vi skriver bare ord, og derefter sige ekko ord. Vi er også kommer til at gentage en ny linje bare for at gøre det lidt klarere, hvad sker der. Så lad os se. Det er ikke at give mig nogen fejl. Og vi vil lukke denne. På vores hjemmeside, er du nødt til at gøre en masse, der i løbet af pset7. Så vi siger mit navn er Sam. Min alder er 45. Det er det ikke. Men det udskriver, som forventet, Sam 45. Og så vil du bemærke, at hvad foreach loop did-- her, Lad os gå tilbage til at så det er op på board-- vi får _GET som ord. Og der var fire ting i _GET. Men det kun udskrives to ting. foreach, bliver dens intelligens selv, antages, at det, vi virkelig ønskede var de værdier, ikke de nøgler. Men der er en måde, at vi kunne printe ud tasterne så godt, hvis vi ønskede at. Hvis vi ønskede at også vide, hvad disse variabler blev kaldt, der er en måde, at vi kan få adgang til det så godt. Og den måde at slags gøre det, så vi kan sige, lader virkelig dele det op i centrale værdipar. Så lad os se hvad der sker nu. Så vi har nøglen. Vi har værdi. Vi har en anden ny linje for læsbarheden. Og lad os se hvad der sker når vi gør det nu. Jeg ved ikke, hvor gammel Jason er. Jasons 15. Så vi har navn Jason, alder 15. Så vi var i stand til at få adgang til nøglen og værdi par af denne ordbog lige ved at sige som centrale punkter at værdi. Og det er en foreach syntaktisk sukker bit, der tillader dig adgang tingene i ordbogen. Så forhåbentlig denne slags fremhæver kraften i foreach løkken. Du kan stort set kast noget, der synes Iterable, som noget, der har flere elementer som et array, som en dictionary-- de er to primære ting du skal arbejde med både i livet og i pset 7. Så du kan smide de ting på det, og det vil regne ud hvad du vil gøre med det. Det vil sige, OK, jeg har tænkt mig at få disse ting fra de data, blev passeret mig. Og det er noget, som du er kommer til at bruge en masse i pset 7. Jeg har tænkt mig at rulle hurtigt ned bare for at se, hvor jeg er på. Har folk har spørgsmål på dette punkt? Spørgsmål på alle? Ja? PUBLIKUM: Så med nøglen og værdi, man kunne kalde den noget andet og det ville stadig arbejde? SPEAKER: Ups. Wow, jeg er helt slettet hele linjen. Store arbejde. Så a, a. Nøgle og værdi er blot en konvention. Det er nyttigt. Du ville få nogle design point, måske nogle stil point for at gøre det, fordi det virkelig formidler hensigten. Men vi siger et og yarp. PUBLIKUM: Du behøver ikke at ændre noget i HTML-filen for at afspejle det? SPEAKER: Overhovedet ikke. PUBLIKUM: Og det bare ved, at på grund af den større lig than-- SPEAKER: Ja. PUBLIKUM: --that indikator for, at that's-- SPEAKER: Ja. Det er en foreach syntaks, men ja. PUBLIKUM: Der er ikke typer. Så hvad nu hvis du ønskede alder at kun være et nummer? Er der en måde at gøre det? SPEAKER: Der er måder at kontrollere, om variabler overholde visse typer. Så PHP spørger lidt mere fra dig, fordi der ikke er nogen typer i. Nogle måder den beder mindre. På nogle måder er det spørger mere. For hvis du har bare noget i en variabel, du har ingen idé om, hvad typen det er. Men hvis du er smart om de variabler at du tildeler typer til og sørg der fungerer kun return-- dig ønsker funktioner til kun afkast én type værdi, så at du kan stort set forventer, at den variabel, du får tilbage fra en funktion vil være af den type at du tror det vil være, dybest set. Men der er nogle metoder som du kan kontrollere. Jeg kan ikke huske dem fra toppen af ​​mit hoved. Jeg venter på at blive blå. isint? isstr? Der findes metoder indbygget i PHP, der kan kontrollere den type variabler for dig. Men hvis du tildeler variabler smart, bør du ikke nødt til at gøre det for meget i pset 7. Men disse metoder findes. Og det er noget, i selve sproget. Og jeg kan ikke huske den præcise syntaks. Vi kunne endda slå det op. Men tiden er af afgørende betydning. har der nogen andre har flere spørgsmål? Ja. PUBLIKUM: Jeg har bare en mere. Så du nævnte GET-metoden, men du nævnte ikke POST metoden. Er vi kommer tilbage til det? SPEAKER: Ja, vi vil komme tilbage til det. Det er præcis, hvad jeg ledte på min telefon, som nu faldt i søvn, men jeg vil finde det. Bare sikre, at vi ramt alle PHP noter. Jep, der er ingen debugging version. Ja, vi har nogle flere ting, vi ønsker at gøre nu på dette punkt. Så taler om POST, som De nævnte, den eneste forskel mellem GET og POST er at huske, når vi kiggede på denne webadresse, og vi så, åh, navn er lig med en og alder er lig yarp er lige i URL'en der for os. POST er lidt mere hemmelighedsfuld med sin bortgang af information. Så hvis du ikke ønsker en bruger at vide, for eksempel, du ønskede ikke brugernavnet og adgangskode på den person logget ind, der skal vises i URL, hvilket er en rimelig ting at der ikke ønsker i URL'en, fordi nogen kan se det. Hvis de forbinder nogen til en side, du ønsker ikke deres URL pudset der, fordi der ville tillade folk at logge ind bare med indsætning af en webadresse i stedet for faktisk at udfylde en formular. POST er en lille smule mere hemmelighedsfuld. Og de eneste ting, Vi bliver nødt til at ændre er denne metode, ændre fra komme til at skrive. Og derefter inde i HTTP, i stedet få adgang array _GET, vi kommer til at få adgang til array _POST. Og vi vil bemærke, at hvis vi åbner dette op igen, Jason langsomt aftager i alder. navn Jason, alder 14. De samme ting popper op. Men vi går til webadressen og disse variabler ikke er der. Og den måde, at POST passes-- så husk hvordan man ser på kilden til en side. Vi går til netværket. Vi opdaterer. Og det er en anden ting, der POST vil give dig advarsler om. Du har måske set en boks, en tekst kasse som denne i din browser. Er du sikker på du vil at sende en formular igen? POST er hvad der sender disse former. Fordi dybest set, hvis du har sendt din kreditkortoplysninger til nogen, der kommer ikke til at dukke op i webadressen. Det kommer til at være en POST anmodning. Så når du opdaterer siden, det er gensende stillingen anmodning. Så nu er vi ønsker at sende danner igen, fordi det ikke kommer at skabe eventuelle identiske køb. Og vi vil opdage, at hernede, den metode, vi bruger, er POST. Og det har faktisk overføre byte. Det overførte 401 af dem. Programmets temmelig lille. Men der er ingen steder, at vi kan se de værdier, der bliver passeret. Websiderne selv kan se, men vi som brugere ikke er i stand til at se, medmindre du er en hacker. Hvis du er en god hacker, kan du se. Hvis du kender det grundlæggende formatet af HTML, værdierne vil gøre sig til kende i siderne. Du vil være i stand til at se. Værdierne vil være der, de er bare lidt mindre indlysende for dig til adgang, dybest set. Har vi noget mere spørgsmål om GET, POST before-- hvad vi vil gøre næste er faktisk se på nogle af koden at du giver i pset 7, tale om hvordan det bruger nogle af disse begreber, og taler om ting, som du vil nødt til at gøre en lille smule i pset 7. Flere spørgsmål før det? Flere spørgsmål du fyre har? Stor. Okay, lad os se lidt ad pset 7, ingen tvivl om, hvad du er alle mest begejstrede. Jeg mener, det er noget, David går gennem en lille smule. Men vi vil have tre mapper på top, samt en konfigurationsfil. Det er for databaser, som vi får tale om i cirka fem minutter. Inkluderer, du aldrig behøver at kigge i denne mappe Hvis du ikke ønsker at, men det er rart at ved, at der er alle mulige hjælpere. Hjælpere er som nyttige funktioner. Og så har vi config, der sætter nogle ting op. Der er nogle funktioner, som CS50 har skrevet som er i hjælper- og config. Og nogle af PHP, der allerede udgange i filer vil gøre en masse af de mere slags af stumpe ben arbejde for dig. Ligesom hvis vi går ind i den offentlige login.php, hvilket er, hvad dukker op til højre, når du går ind i pset 7. Vi vil se, at der er dette kræve erklæring. Og den slags ligesom en skarpe indbefatter hashtag omfatter, hvis du er af en nyere generation. Men det grundlæggende siger, at jeg har brug for adgang til alle funktioner i config.php. Og du kunne have en kræver for alle mulige andre ting. config faktisk kræver hjælpere. Så når du har brug for config, er du også herunder eller kræver hjælpere så godt. Så det giver dig adgang til alle de seje funktioner, som vi kommer til at bruge, tingene gerne gøre. Jeg er faktisk kommer til at lette dette ned en lille smule. Så den funktion så er vi kommer til at gå gennem lige før vi går videre til SQL lidt bit er login.php funktion, lige fordi den bruger nogle af de emner at vi bare talt om i PHP. Du ser den første ting er, hvis $ _SERVER. Dette er en anden global variabel, der du kommer til at beskæftige sig med. Det er ligesom _GET og _POST, men hvad serveren indeholder dette kan lade dig vide, om anmodningen metoden var en GET eller POST. Ligesom tidligere, hvad vi gjorde er lige i vores kode, skrev vi, vi var bare ændre det til at være GET og POST afhængigt af, hvad HTML har. Men der er sider, der kan være tilgås med begge typer af anmodninger. Og du måske ønsker at gøre forskellige ting, afhængigt af typen af ​​anmodning ligesom login gør. Så du kan kontrollere, at anmodningen Fremgangsmåde ved adgang nøgler, ved at bruge en nøgle og få den værdien af ​​noget i ordbogen _SERVER. Så det er en anden global variabel ligesom _GET og _POST. Hvis det er GET, vi ønsker at gøre login-formularen. Render er en funktion, der dybest set bare sætter op den passende HTML og sender det nogle parametre. Denne titel er et parameter, der er bruges i visning, mærkeligt nok, titlen på siden i spørgsmål, de ting heroppe, sige eller hej i vores tidligere eksempel. Nu har vi en anden ting. Andet, hvis det er POST, vi gøre nogle andre ting. Vi bruger den tomme metode. Det er ikke eksisterer, den er tom. Og vi så før, PHP har en rimelig mængde af indbyggede i metoder, som David will-- hvis der er metoder, der er nyttige for dig, de vil blive advaret om dig i gåtur gennem at David giver i begyndelsen oversigt, og også Zamyla s nyttige bits. Hun er tilbage alle. Vi kan alle glæde os. undskylde er en rammende navngivne funktion der bare dybest set udskriver nogle fejlmeddelelser, fordi CS50 er meget høflig. Og nu dette, er dette en tricky bit fordi dette er, hvor vi forespørge databasen. Nu har vi ikke talt om databaser. Og vi vil i den næste fem minutter eller deromkring, maksimum. Men dette er en funktion at CS50 har skrevet at få et bord dybest set fra en database at vi arbejder med i pset 7. Jeg er virkelig dårlig med min nul indeksering dag. Men ja, det er 7. Så forespørge det kommer til at returnere en array, dybest set er nøglekammens. Og fordi disse ting ikke har skrive, så rækker er en vifte af arrays. For når vi tænker på et bord, hvad vi vil gøre er, som du har lært i psets ligesom omgang 15, alligevel hvor du var nødt til at bruge en dobbelt array, vi dybest set har række andre arrays gør en tabel. Og du har fået rækker og kolonner. Og så kan du få adgang til dem som [0] [1], får du [0] [1]. Grundlæggende slags. Så hvad vi laver her i denne funktion, Vi beder databasen hvis brugeren, der er forsøger at logge ind, vil det være sendes gennem POST metoden. Vi vil se vi får brugernavnet fra _POST. De vil have sendt, brugeren eller du vil sende en værdi gennem en form gennem POST, fordi det er brugernavn og adgangskode kram. Vi kontrollere brugernavn at se, er det i tabellen? For hvis en bruger logger i, så deres brugernavn skal opbevares i tabellen brugere, der eksisterer for dette websted. Så dybest set, hvis Brugeren er i databasen, forespørgsel vil vende tilbage denne række, hvilket er et array. Men den vanskelige del er, at hvis selv om den dobbelte array er kun én række, selvom det er en én række array-- ligesom du har fået basically-- hvis du har fået en størrelse ét array der er i besiddelse af en anden matrix, du virkelig gøre med en kolonne. Men det er stadig behandles som en dobbelt array. Og det er her, det nogle gange kan få tricky, fordi vi har fået rækker her. Vores variabel er rækker. Og så er vi skaber en ny variabel kaldet rækken og sætte den lig med den første række af rækker. Og du vil opdage, at kommentar siger, at det er den første og eneste række. Så dette er den tricky del, hvor nu funktioner kan returnere arrays meget let. Der er ikke malloc'erers. Du vil ikke se malloc'erers. Så vil du ikke se SEG-fejl. Men funktioner vil stadig være passerer omkring arrays og data i grupper. Og du skal være på vagt over for, hvad netop dine funktioner vil vende tilbage. Og selv om det er en kolonne som dette, forespørge er stadig i gang for at returnere en dobbelt array. Så for at få adgang, der column-- eller du kan tænke på alt dette, som omvendt da vi taler om rækker. Men for at få adgang til denne ene række, du kan ikke bare sige rækker. Selvom det er en række, er du nødt til gør rowsrows [0] for at slags fjerne denne ydre bit i array og har blot din én række. Har nogle andre ting. Der er en funktion kaldet password_verify der kontrollerer adgangskode, der blev lagt ud. Og så må vi se en anden global variabel her, _SESSION. Dybest set session id er, hvordan du holder styr af hvis nogen er logget ind eller ej. Så lige nu med login.php, vi logger en bruger på. Så hvad vi ønsker at gøre, er, vi ønsker at sige sessionen id er lig med rækken id, som netop giver mening, fordi hver række vil have en anden id nummer som del af tabellen. Vi vil komme ind i SQL i en sekund, så hvis nogen af ​​denne virker lidt ligesom bla, så alt vil blive ryddet op. Men vi kommer til at indstille id lig med den rigtige ting, logge brugeren i. Beklager, hvis noget går galt. Og det er logins formål i liv som professor Malan ville sige. Så det var login.php. Og en masse af PHP kode du skriver i pset 7, vil de være en lille smule. Glem ikke at chmod til de rette tilladelser. Der vil være en lille smule om at i begyndelsen af ​​spec. Men PHP, at du er skriftligt vil være gør ting, der ligner dette. Du kommer til at være adgang nogle ting, er givet til dig i globale variabler af PHP, der har at gøre med den aktuelle indloggede bruger, om der har været forespørgsler sendes til denne side, forskellige ting som. Og det vil også være potentielt iteration gennem rækker af denne ting. I en anden funktion, forespørgsel vender tilbage denne dobbelte array. Og hvis der er mere end en rækker i det, hvis der are-- ja, hvis der er mere end en rækker i det, så vil det være en tabel. Og du måske ønsker at gentage gennem rækkerne af dette array ved hjælp af den foreach loop, som vi beskrev. Så hvis du gør foreach på en dobbelt array, hvad vil word-- her, Jeg vil faktisk skrive det. Jeg skriver det hurtigt her. Hvis vi har en foreach rækker som række, hvad der er den type af rækken? Er der nogen vide? Du har det? Så rækker er en dobbelt array. Så hvad der foreach kommer til at udlede at vi ønsker fra denne dobbelte matrix hvis vi iteration over det? Vi kan antage, at stort set det vil være enten elementer, eller rækker eller kolonner, dybest set. Og så rækker og kolonner vi kan behandle som det samme. Dybest set hvad foreach loop går at gøre, er det kommer til at vende tilbage rækker. rækken vil være af typen rækken, henviser rækker er en dobbelt array. Så hvis du giver foreach en dobbelt array, er det ikke kommer til at gentage mere end et niveau dyb. Som er dybest set at sige, om der er otte celler i dette table-- 1,2, 3 4, 5, 6, 7, 8-- den foreach loop er ikke vil gå gennem hver af disse celler. Hvad foreach loop vil gøre blev det vil gå igennem denne række, give dig hele denne række. Og så er det vil gå gennem denne række. Så det kun gentager ét niveau dyb. Hvis du tilføjer en indlejret foreach loop, så er du kan behandle hver række tilbage fra rækker, du gør foreach række som element, Lad os sige. Og så kunne du gentage elementet. Så det er en kort lille genopfriskningskursus om, hvordan du bruger måske foreach sløjfer i forbindelse med forespørgslen. Er der nogen spørgsmål om PHP? Noget overhovedet, før vi gå videre til at tale om SQL og det sjove af databasen? Føle sig godt tilpas? Føle sig godt tilpas. Okay. Lad os gå videre tilbage til PowerPoint, som du sandsynligvis gå glip af. SQL, yay. Mennesker, der er i min sektion typisk vil vide, at underpositioner i akronymer er altid kun de første ord Jeg tænker på den kamp, ​​der algorithm-- at akronym. Det er ikke en algoritme. Så SQL er en database. Det er et sprog, arbejder med databaser. Og alle databaser er, er borde, i hvert fald i den måde, at SQL repræsenterer dem. En anden måde at tænke på databaser er databaser er et sæt nøgler og værdier dybest set. Du kan tænke på en database, som en ordbog og også som en tabel. Dybest set er det en måde at knytte forskellige data med andre data, ofte gennem rækker og kolonner. Og det er den måde det er SQL fungerer bedst. Så dette er et eksempel på et bord. Jeg har et par eksempler på mennesker i min sektion, der Jeg havde ikke tid til at skifte. Men vi har fået ting som ID, navn, supermagt, og hjemby. Jeg ved ikke, hvor alle er fra i min afdeling, så jeg bare kommer til at antage alle er fra New York Byen, fordi jeg har en høj statistisk sandsynlighed for at være korrekte. SQL vil automatisk tage pleje af ID-kolonnen for dig. Hvis du indsætter en ny række ind i en SQL-database, det vil forøge at ID-nummer og bare dybest set holde sig ligesom fem navne, supermagt, hjemby, hvem på enden af ​​tabellen. Så ID er en kolonne, du vil aldrig behøver at bekymre sig om. Men, som det er tilfældet af login.php, når vi var at få session id fra en tabel og bare bruge id, ID er en måde til entydigt at identificere et element i en database. Så hvis vi havde to Sams, som begge som underviste CS50, og begge af hvem var fra Milwaukee, der ville stadig har forskellige ID-numre og således være forskellige i forbindelse med bordet. Så dette er hvad SQL beskæftiger sig med, at arbejde med i bagenden. Nu er disse fire kommandoer at du bliver nødt til at arbejde med SQL. Og jeg kastede dem alle op på et dias. Men vi kommer til at gå gennem dem alle individuelt. Den første kommando er UPDATE, der gør hvad man kunne forvente. Sig du har nogle data i den tabel, der er forældet. Ligesom hvis du holder styr på folks navne og aldre, hvis nogen er alder stiger, så du vil ønsker at gå ind og opdatere bare, at personens alder. For et eksempel, der virker med vores første table-- du ikke bekymre dig om at skrive alle disse kommandoer på samme tid. Men hvis du har fået opdatering ned, der vil være godt for denne del, fordi vi kommer til at gå tilbage til bordet. Så hvis vi går tilbage til bordet, lad os sige noget, der skete var der var et jordskælv eller en fejl linje, split direkte gennem New York. Og vi ønskede at opdatere alle der boede i New York City. De havde alle til at flytte til Pennsylvania. Det er ikke en hjemby. De havde alle til at flytte til New Haven. Der vi går. Så alle i New York flytter til New Haven. Og så det er noget, der er redigering tre rækker i tabellen. Men i SQL, kan du gøre at i bare én sætning. Så vi går tilbage til at opdatere. Lad mig hurtigt slette dette board igen. Når vi taler om ajourføring, der er et par dele af syntaks, der er nøglen. Nå, alle af syntaksen er nøglen. Men de ting i grøn er valgfrit. Den hvide er nødvendige, lignende foruddefinerede navne. Og lyseblå er ting der varierer afhængigt af bordet. Så det er, hvad der sker med farveskema her, deroppe. Så hvis vi ønsker at opdatere netop disse rækker af de mennesker, der bor i New York, så hvad vi ville gøre, hvis vi sagde UPDATE? Så bordet er, hvor vi sætter navnet på vores tabel. Lad os bare sige navnet af vores bord er tabel én. Så vi ønsker at opdatere tabel én. Og vi ønsker at set-- hvad ønsker vi at sætte? Nå vi ønsker at sige, så column-- PHP behandler rækker som entydige identifikatorer. Og så søjler er de forskellige felter af de elementer i databasen. Så det første element af databasen har et navn Sam, supermagt af CS50, og en hjemby Milwaukee. Så hvis vi sættet, lad os se på de parametre, igen, at sættet tager. Vi har kolonne lig værdi. Så vi ønsker at sige noget column-- der husker er en field-- vi ønsker at se en felt lig med noget nyt. Så hvis vi lige sagt opdatering tabel 1, sæt navn lige Elliot. Få nogle folk fra nyt afsnit ind på dette. Men hvis vi lige gjorde opdatering tabel 1 sæt navn lige Elliot, hvad ville bordet ligne efter det? Folk har nogen idé? Ja. PUBLIKUM: Alt på at rækken ville blive Elliot. SPEAKER: Alt på hvilken række? PUBLIKUM: I den første række. SPEAKER: I den første række? Hvorfor den første række? Jeg mener ikke at samle på dig. PUBLIKUM: Måske alt i hele tabellen? SPEAKER: Alt på hele bordet, ja. Og det er helt rigtigt because-- I var bare at hjælpe dig ud en lille smule there-- fordi vi udeladt den valgfrie WHERE. Hvis du ikke har WHERE klausul, hvad denne kommando vil gøre det vil arbejde med hvert enkelt række i tabellen. Alles navn vil bliver Elliott, dybest set, som Elliot er meget glad for. Eller Yanni, en af ​​de to. Men alles navn vil ændre sig. Så den måde, vi bruger WHERE clause-- og det gælder alle de wheres der er i hver af disse forskellige ting. Så du vil opdage, at SET har kolonne samme værdi. Og det gør HVOR. Men disse er forskellige typer af udsagn. Så kolonnen lig værdi i SET er i opgaven. Ligesom vi siger, vi ønsker at sætte navn lig Elliot. Men i WHERE klausuler, disse er ligestilling udsagn. Så lad os sige vi kun ønskede at ændre personens navn til Elliot hvis deres navn var Ryan, lad os sige. Så når vi siger HVOR navn lig Ryan, at ville held eneste ændring den name-- ville det kun ændre navnet feltet i rækker hvor navnet felt er lig med Ryan. Så hvis vi havde flere mennesker opkaldt Ryan, alle deres navne ville skifte til Elliot. Dette svarer til eksemplet af hvis en fejl linje opdeler New York City og alle har til flytte til New Haven, den måde, vi kan gøre det i en erklæring er UPDATE Tabel 1 SET hjemby = New Haven hvor hjemby lig New York. Dette er den magt UPDATE erklæring. Vi kan vælge et vilkårligt antal rækker gennem sande udsagn om felterne i disse rækker. Vi kan ikke sige UPDATE Tabel1 sæt name = Elliot WHERE række = 1, bortset fra at vi kan hvis vi siger id = 1. Så vi kommer til at være arbejder med ligestilling områder, lige kolonner. Men ved hjælp af ID-feltet er en måde at vælge individuelle rækker specifikt fordi ID-feltet er et unikt identifikator i en SQL-database. Så gerne opdatere rækken én, ID er lig med 1. Opdatering række to, bare ændre det id-nummer. Men magt HVOR erklæring er, at vi kan opdatere tingene baseret på, hvad deres aktuelle værdier af visse ting er. Ja Elliot? PUBLIKUM: Og hvad hvis du ønsker at-- igen, det er et andet spørgsmål. Men mit første spørgsmål var, hvor sker det? Hvor skal jeg opdatere denne? Er dette i en PHP kode? SPEAKER: Hvor du opdaterer, ja. Vi kommer til at tale om, hvor alt dette sker slags, når vi går gennem alle kommandoer. Men hvad du har brug for at vide for nu er dybest set at din SQL database eksisterer som noget at tilgås af forespørgslen funktion, som CS50 definerer. Så hvis du bruger søgefunktion, du kan få adgang til denne tabel. Så du vil sende disse kommandoer til din tabel i PHP-filer gennem forespørgslen funktionen. Du kan også spille rundt med dit bord direkte. Og det er den bedste måde at teste den slags kommandoer. Og vi vil gå igennem præcis hvordan at gøre det i bare en lille smule. Så det er UPDATE kommando. Og resten af ​​kommandoerne vil være slags ens, arbejder på lignende ting. INSERT INTO er formentlig den mest forskellig fra UPDATE. Jeg har tænkt mig at lade det op der for bare en lille smule og arbejde herovre. Så INSERT INTO, vil du se denne tabel er stadig den samme. Du ønsker at indsætte i. Kapitalisering, SQL er tilfældet ufølsom. Så du behøver ikke at kapitalisere disse ting. Konventionelt ordene i hvidt aktiveres. Men jeg også farvekodet dem. Den eneste grund til, at du kapitalisere dem, når du skriver dem er bare for at understrege at de er konstanter. Og så kan du enten se på kapitalisering eller det faktum at jeg har farvet dem forskelligt. Så vi har fået INSERT INTO, lad os gøre Tabel 1 igen. Dette er alt på én linje. Jeg er bare adskille det ved de forskellige udsagn. Så du skal ikke bekymre dig om det faktum, at Table1 gjort det på den anden linje. Så vi ønsker at indsætte I Tabel 1 nogle værdier. Og du vil opdage den valgfri bit, som jeg vil komme til i en anden. Så vi har fået værdier. Så lad os sige, at vi ønsker at tilføje Andi til vores bord, fordi vi savner Andi. Andi er syg. Så lad os tilføje Andi til vores bord. Husk, at ID-nummer opdateres automatisk. Så de eneste felter, vi at bekymre sig om er navn, supermagt, og hjemby. Og så den måde, at vi gør det, ser på vores syntaks, er vi har lige fået en parentes, med komma adskilte værdier, som hver er en værdi. Så hvis vi ønskede at indsætte Andi ind i vores tabel, alt, hvad vi skal gøre er at rette Andi. Hvad er Andi supermagt, folk i Andi sektion? Hun kan lide fly, eller kan lide hastighed, eller noget. Hvad skal vi allerede har deroppe? Vi har CS50, flyvning, hastighed og styrke. PUBLIKUM: tidsrejser. SPEAKER: Tidsrejser, forbløffende. Så vi har fået Andi, tid rejser, og hendes hjemby. Det er et rigtig godt spørgsmål. New York, medmindre nogen kender. Alle er fra New York er den lektie at tage væk fra i dag. Så dette udsagn ville indsætte, som femte række, med supermagt tidsrejser den og en hjemby New York. Men valgfrit felt er dybest set en måde at angive præcist, hvilke kolonner du vil indsætte tingene i. Den måde, som vi gør det nu, Andi, tidsrejser, New York, går i den nøjagtige rækkefølge af vores table-- navn, supermagt, hjemby. Og hvis du ønskede at gøre noget andet end det, ligesom sige, at du ikke vidste nogens supermagt, ligesom hvordan jeg vidste ikke Andi s supermagt i begyndelsen. Så alt jeg vidste var hendes navn og hendes hjemby. Hvad jeg kunne gøre, er at jeg kunne do-- Jeg vil slette denne hurtig. Jeg ønsker at kun opdatere kolonnerne. Og det er her den valgfri kolonne liste kommer i spil. Jeg ønsker kun at opdatere navn og hjemby. Og da vil jeg sige værdier. Jeg vil gøre Andi og New York. Hvis jeg havde udeladt på listen over kolonner og netop gjort disse to ting, hvor ville New York er gået? Hvilken kolonne ville New York By er blevet placeret i? Folk har nogen idé? Supermagt nøjagtigt. Så dette vil bare gå i orden. Og når den når enden af ​​den liste, vil det bare stoppe fylde ting i. Og de værdier, at det vil holde i alle kolonner vil bare være NULL. Så fordi vi angivet navn og hjemby, vi kommer til at have ID 5, navn Andi, supermagt NULL. Så supermagt er en initialiseret værdi. Du vil ikke nødvendigvis få den samme Valgrind fejl, hvis du forsøger og adgang til den. Alt vil være pænt nulstillet ud, fordi NULL er en værdi i SQL. Det er en konstant. Og så hjemby vil være New York. Så det er INSERT INTO kommando. Før vi går, er der to flere kommandoer. Har folk har spørgsmål om UPDATE, om INSERT INTO, om SQL generelt inden vi flytter på vores endelige bits? Folk føler sig godt, stor. Elsker det. Så lad os tale om SELECT. Går grøft UPDATE herovre. Og SELECT bliver meget ens. Målet med SELECT, SELECT formål i livet er at give dig en masse kolonner at opfylde visse betingelser. Og når jeg siger tilfredsstille visse betingelser, dit sind måske straks gå tilbage til at WHERE der kom op i UPDATE. Og denne klausul er præcis der i SELECT. Hvis vi ikke sætter WHERE klausul og vi siger SELECT navn, hometown-- stavet, at en lille wrong-- navn, hjemby FRA Tabel1. Hvis vi bare sige, hvad SELECT vil give os, er det kommer til at give os en double-- en tabel, i stedet. En dobbelt række, hvis vi er tænker i PHP sanser. Men det er bare kommer til at give os en dobbelt række af to columns-- navn, og hjemby. Og det vil ignorere id. Og det vil ignorere supermagt. Og det vil bare give os hver enkelt række i skemaet. Så hvis vi bare indsat Andi, vi vil have andi. Og vi vil have den oprindelige fire. Hvis de har været opdateret, der vil afspejles, et cetera, et cetera. Så dette er, fordi vi ikke bruge WHERE. Men vi kan bruge det i præcis den samme måde, som vi brugte det i UPDATE. Hvis vi kun ønsker en tabel over de navne, og superkræfter af mennesker der lever i New York, kan vi udføre en sætning Ligesom SELECT navn, superpower-- Jeg bare at forlade at-- FROM Tabel 1 WHERE hjemby = New York. Så dette går til at vise, at du kan komme helt forskellige kolonner, og derefter sætte kolonner, at du ikke er selv at komme tilbage i WHERE. Vi har ikke selv ønsker det hjemby alle. Men vi ønsker navn og den supermagt af mennesker hvis hjemby er New York. Så det er noget, vi kan gøre med WHERE klausul er, at vi kan behandle kolonner at vi ikke nødvendigvis ønsker tilbage. På samme måde, UPDATE, kan vi håndtere med søjler, som vi ikke nødvendigvis ønsker at opdatere. Vi kan opdatere byen alle som navn er Sam, for eksempel. Vi kan opdatere byen alle, hvis ID-nummer er 2. Så bare opdatere by i den anden række hvor vi ikke behøver at beskæftige sig med nødvendigt den fælles spørgsmål. Og slette er, som du ville forventer, DELETE FROM Tabel 1. Og så har vi en anden WHERE. Så vi kan sige WHERE ID = 1. Slet den første række. Og SLET vil altid slette en række, eller det vil slette nogle antal rækker. DELETE FROM tabel, hvor hjemby = New York sletter alle i New York City. Det er, hvis der var en pludselige tragiske pest og du ville bare fjerne alle fra bordet, der boede i en bestemt by der blev ramt af pesten. Må de hvile i fred. Disse er de fire SQL-kommandoer at du bliver nødt til at bruge. Du har måske ikke engang behøver at bruge dem alle. Men disse er de fire at CS50 forventer, at du at være komfortabel med at gå ind i både quiz 1 og også pset7 og pset8. Der er bare det bord igen. I denne ene, Roys supermagt har blevet opdateret til laserstråler, som er et eksempel jeg ikke bruge. Jeg ved ikke, hvilken en Roy foretrækker, men styrke. Roy har en supermagt af styrke. Katherine ikke gøre det i dag. Det er uheldigt. Men hun har super hastighed. Nå det var PHP. Før vi taler om MVC, gør nogen der har spørgsmål om PHP? Nu SQL eller PHP, hvis du pludselig har komme op med et spørgsmål om PHP? Stor. Okay, vi alle sat derefter. Så taler en lille smule om model view controllere, lad os gå tilbage til nogle af de ting i pset7. Så hvad modelvisning controller is-- Jeg er ikke kommer til at gemme mine ændringer til login fordi jeg helt slagtet det. Men dybest set har vi to separate ting foregår. Vi har en offentlig mappe, der indeholder den kode, der kommer til at blive henrettet og de websider, der vil blive besøgt. Og vi har også denne udsigt mappe. Og visninger indeholder skabeloner. Dette er, hvad funktionen render-- vi så gør funktion i en flok af PHP kode at CS50 har allerede skrevet til dig, der tager i visse parametre. Hvad denne kode gør er det at gå i udsigt, som er sæt af lignende prewritten HTML-kode, og det er at indsætte værdier i visse steder. Det er sådan, når man gå ind i CS50 Finans, den samme overskrift er på hver side. Den samme sidefod er på hver side. Dette skyldes den måde, at gengive værker er det vil automatisk lappe i denne header og viewer, som du kan finde i udsigt. Vi kan faktisk gå ind i header, og se, det er en HTML-fil med et hoved. Det har fået nogle stylesheets. Du behøver ikke at se på CSS for pset7, hvis du ikke vil. Men du kan ændre dem, hvis du ønsker, at gøre din Finans ser lidt anderledes. Det har fået nogle PHP i header lidt at se hvis der er en anden titel det skal sættes i denne overskrift. Men blot nogle andre scripts, og links og andre ting. Hoved ender, kroppen begynder, og ups, vi har denne underlige lille ende bit. Og der er en div, ligesom en formløs slags element der har en idé om midten. Og så når vi ser sidefod, vi har i slutningen af ​​en div. Vi har en bund, som er hvor sidefoden tekst er. Slutningen af ​​div, slutningen af ​​krop, ultimo HTML. Så hvad gør er gør, er gøre er sortering af lappe header, en forskellige PHP-fil, vil indeholde de faktiske ting, vil du se, ligesom dit bord af bestande hvis du køber eller sælger aktier. Og så vil det tilføje i sidefoden. Og modellen visningen controller idé er, at vi ønsker at adskille, hvordan tingene ser fra koden. Det er vi ønsker at adskille frontend og backend, hvor frontend er de ting, som brugeren ser, den pæne visuals-- HTML, CSS, sådan noget, billeder, et cetera. Og backend er PHP. Dette er kode, som du skriver. Det er her, den kode, der er laver egentlige operationer. Dette er, når du tilføjer en bestand til dit bord, når du køber og salg, det er backend. Og vi kan, som du så, herunder PHP direkte i HTML. Så det, vi kunne have gjort for denne opgave er netop haft en HTML-fil for hver side, ligesom login. Og så på den side, bare havde en enorm blok af PHP kode, herunder alle den kode, pågældende side specifikt skulle. Og så kunne vi have gjort det for portefølje. Vi kunne have gjort alle køb og salg inden for de enkelte sider. Men fordi vi er rendering separat hvorfra vi skriver backend kode, kan vi let ændre, hvordan tingene ser uden skiftende hver enkelt fil. Vi gør ting som blot tilføje en ny div til bunden of-- Hej Jeg ændrede sidefoden. Du kan bare gøre den slags. Men også, kan du ændre hele visuelt layout uden at påvirke, hvad der er går i backend. Og du kan ændre Hele backend og stadig har det ser ligesom det gjorde før. Denne Er tanken om modellen view controller. Og det er faktisk en pålagt paradigme i nogle af de programmeringssprog du måske ønsker at bruge for de endelige projekter. Hvis du gør iOS udvikling, de har udsigt, hvilket er, hvad du ser på iPhone, og derefter backend som som en separat ting. Du kan tænke på en lille smule. Der er en masse binære filer i datalogi, som er sjovt, fordi alt er i binær. Jeg har ikke planer om det. Det var et ordspil utilsigtet. Ja, ordspil ikke beregnet. Men ligesom .H filer og .c filer, der er en masse adskillelse af ting, som vi måske ikke har brug for. Så kan vi bare redigere h filer eller nogen kan bare se en .h fil og vide præcis de funktioner, der er i .c fil uden nødvendigvis at kende deres gennemførelse. Denne idé om at adskille komponenter der er afhængige af hinanden men kan slags adgang hinanden gennem forskellige kanaler, passerer variabler, bare omfatter erklæringer, ting gerne, at dette princip er med til at skabe applikationer der kan være lettere redigeret af flere personer, lettere kan ændres eller modificeret på en stor skala, og er lettere at debug i en masse måder. Virkelig hurtig, jeg har et par tips til pset7, som jeg vil gøre fuld skærm, så du ikke bare at kigge på til-- spids spids Tippee. Der er ikke så mange tips. Men jeg nævnte PHP er svært at debug. Dobbelt og tredobbelt kontrollere det. Hvis din kode er bare ikke dukke op på siden, det er nok en PHP fejl, beklager. Du har brug for aldrig at se på CSS, hvis du ikke vil. Men når du er færdig, kan det være en dejlig lille sjov ting at bare gå i og rode med CSS parametre. CSS og HTML er et eksempel på en model view controller stil ting også, ikke? Du kunne have stil tags indersiden af ​​HTML-elementer. Men hvis du slags outsourcing dem til CSS, de er nemmere at redigere, og leg rundt med, og have det sjovt med. Forkæl CS50 hjælper fungerer som sorte bokse. Du behøver ikke at vide præcis, hvad render laver, men tro det altid at gøre det rigtige ting afhængigt af hvad du give det, ting som dette. Og jeg vil anbefale ser Davids walkthrough, gennemgår alle Stuff, ikke kun de todos, men du virkelig kan behandle disse som sorte bokse. Må ikke gå ind i disse funktioner på udkig efter bugs. Og velkommen tilbagevenden vores Overlord Zamyla. Stor. Er der nogen endelige spørgsmål, før vi slags hoppe for dagen? Er jeg stadig lever? Stor. Hej Livestream mennesker. Stor. Er der længere spørgsmål? Ingen? Og så tror jeg, vi er god til at gå til i dag. Jeg vil holde sig omkring en lille smule bagefter, hvis folk havde spørgsmål de var bange for at spørge på åen. Men ellers have en god dag.