SAM Levatich: Welcome to sezione per questa settimana. Io non sono Andi. Andi è caduto malato quel giorno, e io sono stati una sorta di chiamata in last minute farsi carico. E 'la stagione influenzale, in modo da assicurarsi che si sono rimanendo puliti, lavarsi le mani, e mangiare sano in modo che anche voi, non siete costretti a letto. Ma senza ulteriori indugi, cominciamo. Oggi, stiamo andando a parlare su PHP un po 'come bit-- PHP si riferisce in HTML, come si riguarda CSS, e alcuni dei web roba che hai fatto l'ultimo incarico. Stiamo per parlare un po 'di SQL e come si può lavorare con i database, che è un componente piuttosto chiave di P set 8-- P impostato 7. P set 7. E poi andremo a parlare un po ' po 'su come controller di vista funzionano e perché questa è una filosofia dietro un po 'di pagine web moderne e design diverso. Praticamente un sacco di tipi di applicazioni e applicazioni che si potrebbero spedire utilizzano questo modello, quadro controller della vista, che si prevede di utilizzare in P set 7, quindi mi parlare un po ' sul perché che è diventato popolare, perché è importante e piacevole. E poi io finalmente andare avanti per alcuni consigli su affrontare P imposti 7. E se abbiamo tempo rimasti alla fine, possiamo effettivamente fare un po ' lavorare su questo insieme. Quindi, PHP. In realtà, avrete notato questo-- non c'era bisogno davvero di immergersi in it-- ma P set 6 avuto qualche PHP codice che stava succedendo. E perché PHP è un C-like linguaggio, PHP, a differenza di HTML e CSS, è un linguaggio di programmazione, considerando HTML e CSS sono statici. Sono linguaggi di markup che si occupano con lo stile e il layout visivo. PHP è il vero affare. PHP ha loop, ha conditions-- tutta quella roba che è divertente su C. Ha un paio di cose che sono un po ' po 'meglio di C, che vedremo, ma penso che il modo più semplice per parlare circa il PHP è solo immersione in. Quindi ho intenzione di andare a destra nell'IDE a questo punto. La prima cosa che andremo fare è effettivamente guardare un po 'ad alcuni dei Codice PHP che era in P 6 set. Quindi il modo che facciamo che-- prima, il modo in cui noi stavamo correndo il server per l'appliance era che avremmo dovuto type-- usare sia l'implementazione o l'implementazione del personale di server.c andando nella directory e l'esecuzione con entrambi senza server.c arguments-- così lo chiamano semplicemente il host locale, che è ciò che probabilmente ha fatto la maggior parte del tempo-- e poi alimentandola un directory-- con cui utilizzare come radice in cui il sito sarebbe essere eseguito, in fondo. Questa settimana per P impostato 7, come grande come il nostro codice per server.c è, ci sono persone che hanno già scritto queste belle cose sopra a CS50 che hanno un po ' più funzionalità, un programma server che è in grado di trattare con un po 'di più delle complessità che faremo vedere in entrambi set P 7 e P impostare 8. E il modo in cui si avvia il server è semplicemente digitando "apache50." E prima di fare qualsiasi cosa, si vuole fare in modo che Apache 50 non è già in esecuzione com'è sulla mia macchina, che ho fatto per testarlo. E lo si fa chiamando apache50. Fermi, e vedrete che è l'arresto il server web, se si può guardare lì nella parte inferiore della finestra del terminale. E poi tanto per cominciare, siamo chiameremo "apache50 iniziare." E poi stiamo andando per alimentare una directory. Ora, perché vogliamo guardare ad alcuni dei P set 6 codice che avevamo implementato, in realtà ho copiato un po 'di P set 6 codice nel mio dispositivo di piegatura, che potete vedere in là a sinistra. Si chiama "Section8" in tutte le lettere maiuscole perché io sono così entusiasta essere oggi live-streaming. Quindi, se si esegue questo, dovrebbe tutto il lavoro abbastanza efficace. Si dice, OK, il nostro sito è ora disponibile all'indirizzo della IDE, in fondo, che è quello che si stava utilizzando esattamente come è stato nel P impostato 7-- P set 6. Tutti i miei indici sono un indice di oggi. Così possiamo andare a quel indirizzo, se vi ricordate, semplicemente cliccando questo piccolo pulsante in alto a destra. E vi ricordate questo codice, che successo quando sei andato in ciao.php. E ciò che il codice è stato progettato per fare è quando si digitato un nome qui-- se dici Sam perché questo è il mio nome-- e clicco Say Ciao, quando siamo andati alla pagina successiva, tale nome doveva essere visualizzato. Sarebbe dire: "Ciao, Sam" o "Ciao", qualsiasi nome messo in esso, anche se siamo andati ad un nuovo sito web. E questo è il genere di cose che PHP può fare per voi. PHP è in grado di trasmettere i dati tra due pagine web. Questa è una pagina completamente diversa. Vedrete il titolo è "ciao" qui. In realtà, hanno lo stesso titolo, ma io promettono sono diversi web pagine Se guardiamo alla fonte. E si può passare i dati che sono inserito in questo campo di testo, si presenta al prossimo Pagina che viene richiamato, e quindi che i dati sono in grado di essere lì nella sua forma attuale. Ora non abbiamo ancora implementato questo noi stessi, che è quello che andremo a fare in questo momento per sorta ottenere un sapore di come funziona PHP, ma l'idea chiave è che si può PHP-- sorta di pensare ad esso come una funzione. Qualcosa che PHP può farvi non è che può prendere parametri che si inserisce in una pagina HTML attraverso l'uso di PHP e forme, e può passare come parametri quelli alla pagina successiva che viene caricato su. In questo caso, stiamo caricando questo pagina con il tasto "Dite ciao". Ma per ora, in realtà ho cancellato alcuni di tale codice nel hello.php che veniva eseguito che è stato effettivamente che espongono il "ciao, mondo "o" ciao, Sam "o "ciao", tutto ciò che era appena introdotto. Quindi, per ora, siamo intenzione di farlo, in fondo. Stiamo andando a ricreare quella e anche aggiungere un po 'di più funzionalità, fare un po 'di più con esso, vedere ciò che PHP è veramente capace. Quindi, prima, parliamo di questo file, hello.php. Quindi, se focalizziamo l'una poco bit-- e ora sono sorta di cercare di scorrere tutto il modo in cui around-- ci andiamo. Vedrai si chiama hello.php, ma la sintassi di esso si presenta come un file HTML. Questo perché il PHP reale in questo file è tutto bloccato tra questi domande blocchi mark-cursore. Tutto qui è considerato codice PHP. E si noterà che quando ho fatto un commento, vedrete il familiare due barre. E se vi ricordate, in HTML, se digito un commento, sembra qualcosa di più vicino a questo, che è un commento in HTML. Quindi, in realtà tutto tra queste due parentesi angolari è ora codice PHP, che si riflette nel fatto che questo piccolo commento simbolo è trasformato in un commento. Così ogni volta che scrivere codice PHP, anche se non c'è il codice HTML al di fuori di esso, sta andando sempre essere racchiuso tra queste parentesi angolari con punti interrogativi. Si può pensare a una sorta di it-- come tutto del codice che correva nei vostri programmi C è stato racchiuso in un int main, vuoto, parentesi graffa, dichiarazione parentesi graffa fine. E vedrai parentesi graffe in PHP, anche, ma questo è sorta di come il metodo principale di PHP. Così ora, come facciamo nulla in PHP? Ora, PHP è un programmazione lingua che è molto simile al C, ma opera sul web. Quindi, una cosa che ti immediately-- uno delle prime cose che davvero ha fatto con C è stata stampata roba, giusto? Quindi, in C abbiamo fatto con una funzione printf. Abbiamo dato una stringa, probabilmente con una nuova linea, e poi abbiamo risolto con un punto e virgola. Quindi il modo che stiamo andando a farlo in PHP-- perché non è abbastanza printf. E 'un po' di sintassi diversa. Il modo in cui il risultato della stampa le cose in PHP è che diciamo, "echo ciao" o "echo" qualsiasi parola. E che ha l'effetto di fare printf con una stringa, "ciao". E aggiunge la nuova linea ad esso. Quindi cerchiamo di fare in questo momento sure-- Io lo zoom di nuovo un po 'bit-- facciamo in modo che tale codice funziona perché ci potrebbe molto essere un bug in questo codice che dovremo affrontare. Quindi il server è già in esecuzione. Quindi: se ci spostiamo di nuovo fino in fondo, yup, il server è ancora in esecuzione. Quindi, se abbiamo appena toccare questo po 'a destra qui-- welcome-- dovremmo get-- grande. Abbiamo ancora avendo la "Dite ciao" dialogo familiare, ma quando digito "ciao", vedremo che il testo "ciao" era davvero stampato, che è esattamente come ci aspettavamo perché l'eco in PHP è proprio come un printf. Ma torniamo al codice, come in P set 6 ha fatto il codice di distribuzione si sono forniti fare in modo che PHP avrebbe uscita la cosa che voi digitato sulla schermata precedente? E di esaminare sorta di perché ciò che accade, siamo intenzione di andare in index.html, che è il file originale, il file si presenta in questa schermata con il tasto "Dite ciao". Si nota che non c'è tutte le cose classiche che ci si aspetta da HTML tale come queste cose, questi tag racchiusi tra parentesi angolari, come PHP ma senza i punti interrogativi, che indica una cosa speciale in HTML. Abbiamo titolo, che è "ciao". E si noterà che, come abbiamo visto, il titolo è "ciao" in entrambi i casi. Cambiamo questo a "dire" solo così noi in grado di distinguere noi stessi in cui ci troviamo. Ma abbiamo un corpo. E poi la cosa interessante, il bit che compare nel codice HTML, È questo elemento modulo. E così abbiamo un modulo. E questa è la chiave. Questo è il modo in cui stiamo lavorando con PHP. Il parametro di azione forma dice che ciao.php è quello che stiamo andando a trasmettere i valori in questa forma a. Questo è dove stiamo passando i parametri, per così dire. Noterete un'altra cosa qui è che il metodo è "get". Ci sono due primari metodi con cui sarà essere utilizzando PHP per passare i dati tra le pagine web websites--, rather-- in questo incarico. E quei metodi sono "get" e "post". Ci sono alcune sottili differenze tra GET e POST che avremo into-- noi si "get" in, se si vuole. Ma per tutti gli intenti e finalità, ottenere e post sono entrambi solo modi che si passa parametri con leggermente diverse esecuzioni. Per ora, stiamo andando a utilizzare ottenere perché ottenere era quello che è stato utilizzato originariamente nel file PHP di P set 6. E in realtà, se andiamo a guardare e prima di aver modificato qualsiasi altra cosa, Sto per dire ciao a-- come ti chiami? PUBBLICO: Elliot. SAM Levatich: Oh, cribbio. Io non so come si scrive questo. Potrebbe significare che per me? PUBBLICO: E-L-L-I-O-T. SAM Levatich: I-O-T? PUBBLICO: Sì. SAM Levatich: Perfetto. OK. Credo che sapevo come si scrive questo. Mi dispiace per questo. Ma se diciamo "Dite ciao," non è non sta andando a mostrare sullo schermo ma perché abbiamo modificato il codice un po '. Ma se "dire ciao" - OK, "ciao" è qui. Ma se prendiamo un più stretto guardare l'URL stesso, vedremo che finisce con hello.php? name = Elliot. Così, questo è un modo di comunicare alla pagina web successiva i parametri che abbiamo passati. Abbiamo detto name = Elliot. E questo è in ultima analisi, come P set 6 accesso alla variabile che abbiamo passato in attraverso il modulo. E questo è qualcosa che è peculiare di una richiesta GET. Una richiesta get rende i parametri noto l'URL del sito web. E vi ricordate, anche, in P 6 set che si ha dovuto scrivere una funzione quello trattato con il fatto che questa stringa di query potrebbe esistere dopo che un file. Ci potrebbe essere un punto interrogativo seguito per praticamente qualsiasi numero di caratteri. E questo è esattamente quello che sta succedendo qui. E la ragione si doveva analizzare che nell'implementazione di server.c in P set 6 è così che si potrebbe dire il codice PHP che name = Elliot. Avevi bisogno di essere in grado di analizzare che fuori dell'URL in modo che il file PHP in questione sapeva cosa a che fare. Quindi speriamo che questo dà la motivazione per server.c ora che ci stiamo muovendo su al di fuori di C in PHP. Quindi cerchiamo di realmente concentrarsi su come accedere alla cose passare attraverso una richiesta GET ora a questo punto. Io vado a salvare questo. Non abbiamo cambiato nulla. Sembra che abbiamo un campo di input. Stiamo impostando alcune proprietà, come si può fare un HTML. Queste sono le cose semplici. Non abbiamo bisogno di questi. Ma abbiamo completamento automatico off, che fondamentalmente says-- si sa, quando si digita le cose nella rete, talvolta cerca di riempire quel dentro per voi. Quindi è una cosa bella. Vogliamo disattivarlo per questo scopo. E 'stata una decisione CS50. Così possiamo cancellare che se volevamo. Autofocus attacca solo il cursore nella giusta forma all'inizio. Ancora una volta, non troppo importante. Ma name = "nome" - è un po ' difficile perché il suo nome e il nome. Ma avremmo potuto cambiato questo a qualcos'altro. E infatti, questo è quello che faremo adesso. Diremo "persona", che è un po 'come nome se una persona è definita dal loro nome. Quindi cerchiamo di chiudere questo, riaprire il nostro sito web dal momento che il nostro server è ancora in esecuzione Apache 50, e ci diranno, ciao, ecco Elliot di nuovo. Perchè no? Ciao. E se andiamo qui, vedremo allora invece di name = Elliot, dice persona = Elliot. E questo è un risultato diretto del fatto che abbiamo appena cambiato name = "person". Quindi, in un elemento di ingresso un modulo HTML, il campo del nome è l'identificatore per il parametro che viene passato. E 'come se si sta creando una funzione "aggiungere", che ha preso in due interi e lei ha detto un int e int b. Sarebbe un nome, e se si voleva un'altra forma, che possiamo fare semplicemente copiando e incollare, allora avremmo nome b. Così ora avremo due parametri che vengono passati attraverso arrivare al prossimo website-- la pagina web successiva, ciao.php. E possiamo realmente vedere che ancora una volta, se vogliamo. Questo è il modo più semplice per affrontare il codice web nell'IDE, in fondo. Si avvia il server, farlo in esecuzione, e quindi ogni volta che si apportare alcune modifiche, proprio vicino il file giusto per essere sicuri. Premendo il pulsante indietro è un po 'difficile perché potrebbe caricare un precedente versione, non quella più aggiornata. E poi basta cliccare il tuo nuovamente il pulsante, pop destra up-- oh, e ora ci sono due forme. E così se digitiamo una cosa in ogni tra-- "Hirshhorn jason," per instance-- diciamo ciao. Noi guardiamo ai nostri parametri. Sembra che abbiamo, come previsto, un = jason e b = Hirshhorn, che rappresenta i due parametri che siamo passati a questa funzione. Così ora andiamo in realtà arrivare a attuazione di tale funzionalità che abbiamo avuto in P set 6. Così adesso stiamo solo facendo eco ciao. E questo non è molto utile. Vogliamo eco un po 'variabile che è stato passato a noi. E sappiamo il nome di questa variabile. Abbiamo una e abbiamo b. Così abbiamo potuto scegliere di eco uno dei due. Ma come possiamo accedervi? Beh, ci sono certi variabili globali in PHP. E ho intenzione di scrivere loro commenti qui. I due più importanti sono get e post per i nostri scopi in questo momento. Questi sono i matrici o, Tecnicamente, i dizionari dove le nostre variabili che siamo passando alla successiva pagina web in diretta. E vedremo presto come usarli. Un'altra breve nota sul codice PHP e alcune specifiche di it-- in C, di dichiarare una variabile o utilizzare le variabili, in primo luogo dovuto dichiararli. E che cosa si doveva fare quando si hanno dichiarato loro c'era dire int a o char b. Si doveva dichiarare i tipi di questi le variabili prima di voi li ha creati. PHP-- non c'è bisogno di fare nulla di tutto ciò. PHP non chiede il tipo di variabile. E il modo in cui si creare un variable-- piuttosto che dire int, char, string-- che è davvero char *, come abbiamo know-- piuttosto che fare tutto che, perché tutto è dello stesso tipo, senza tipo, possiamo solo utilizzare un carattere, che è il simbolo del dollaro. E vedrete che è già popping up, piccole cose completamento automatico. E si sta dicendo che _CET e _POST sono due opzioni che ho a disposizione a me. Alcune di queste altre cose sono altre variabili globali in PHP che userete su il corso di P impostato 7. Per ora stiamo andando a concentrarsi su GET e POST. Ma questo è un utile cosa che l'IDE fa dove una volta che hai digitato in quel segno di dollaro, si inizierà compilando variabili globali o variabili che hai già definiti. Quindi, se si voleva definire una variabile chiamata "stringa" si può solo impostare uguale a "hi". Ed è in fondo così semplice come sembra. E allora potremmo fare qualcosa come "echo $ string". L'IDE deve essere gettando qualche errori se sto facendo qualcosa di sbagliato, quindi speriamo che sto facendo tutto a destra. Ma bug sempre sorgono. Un'altra cosa difficile su PHP è che non è compilato. Quindi, con programmi in C, si dovrebbe fare la routine quotidiana di-- fondamentalmente, si potrebbe apportare modifiche alla il codice, devi salvarlo, e poi si sarebbe ne fanno, dove era make il passo che chiama il compilatore, clang, per rendere il codice, questo testo presentare, in un file eseguibile. PHP è C-like, ma è eseguito al volo dal browser web. Quindi non c'è modo di sapere. Fai getterebbe quelli utile errori, giusto? Sarebbe come, non dichiarare questa variabile prima si è tentato di usarla. Hai fatto tutto questo male segfault stuff--, segmentation fault, tutto quel genere di divertimento volte che è venuto con make. PHP è un arma a doppio taglio perché non sarà possibile ottenere tali errori, ma questo significa anche che non si sa davvero cosa c'è di sbagliato con il vostro programma se solo esegue e non funziona. Ma il debugger dovrebbe indicare alcuni si spera utile piccole cose sintatticamente che si può risolvere. Così ora se andiamo oltre a-- dicono, chiudiamo questo. Riaprire. E siamo di nuovo qui a. Così abbiamo una variabile e una variabile b. E questi non saranno in definitiva importa. Li chiameremo h e g per nessun motivo particolare. E diciamo ciao. Ora sembra che la nostra stringa "hi" è davvero la stampa. Abbiamo creato una variabile chiamata "stringa", impostarlo uguale a "hi". Si noti che non abbiamo avuto a che fare malloc o fare un array di caratteri. In PHP, perché le variabili sono senza tipo, una stringa è la stessa come per char tutti gli effetti. Questo potrebbe essere "hi". Questo potrebbe essere solo il carattere k. Questo può essere un numero 1. E non importa. PHP non si preoccupa il tipo di variabile. O, lo fa la cura. Si preoccupa quando si tenta e fare le cose con esso, ma non importa in la fase di dichiarazione. E proprio come è possibile in C, è possibile dichiarare stringhe sullo stack come questo anche se dicendo "stack" è un po ' po 'un termine improprio potenziale quando stiamo parlando di PHP. Ma noi non dobbiamo preoccuparci di questo. Così abbiamo ottenuto la nostra stringa "ciao", e abbiamo eco corda. Così ora abbiamo discusso variabili. Così ora abbiamo bisogno di parlare di ottenere e postare ed eseguire l'ultima cosa che è necessario per ottenere proprio questo back up alla funzionalità del P set 6. Così adesso siamo riecheggiando la corda, ma noi non hanno queste variabili GET e POST. E perché stiamo usando il metodo GET, essa sembra naturale che il nostro variabile che ci interessa, sia a che b, sarà situato nella matrice o un dizionario, tecnicamente ottenere. Quindi, se abbiamo istituito ottenere come questo con il vostro groups-- ho premuto entrare e non gli piaceva it-- ma qui abbiamo ottenere. E così ottenere esiste già. Così possiamo già iniziare a accesso alcuni degli elementi di get. Se noi otteniamo, questa sintassi per array in PHP è molto simile al C. Noi abbiamo i nostri due parentesi quadre. Quindi, se diciamo entrare in una normale array, abbiamo potuto accedere l'indice zeroth, il primo indice. PHP è indice zero. Potremmo dire zero, uno, roba two-- come questa. E ho detto che arrivare è tecnicamente un dizionario. Così che cosa PHP sta facendo sotto il cofano, che è un po 'più bello di C, è già ti dà un po ' funzionalità dizionario, che è davvero tabelle hash, o cerca di, presumibilmente. Oppure, tecnicamente potrebbe essere una prova pure. Ma PHP sta attuando una tabella hash, che costituisce dizionario efficace. E così sappiamo il nome della nostra variabile, giusto? E 'in fase di passata in la stringa di query da PHP. Abbiamo a = h e b = g dove e b sono i nomi delle variabili. Quindi il modo che si possa accedere al valore che corrisponde alla chiave nel nostro dizionario è semplicemente dicendo _GET_GET ["a"]. Così ora abbiamo _GET ["a"]. E se noi sostituiamo appena dentro il nostro eco, se abbiamo eco _GET_GET ["a"] - e vedremo se il debugger getta eventuali errori circa questo-- salveremo che e chiudiamo questo fuori. Aprirlo. Quindi stiamo solo facendo un diritto ora, quindi b non dovrebbe importare. "lei" e "lui" - "ronzio." "suo" e "ronzio". Suona bene. Ed è stampato "lei" che è pazzo. Ma questo è esattamente ciò che stava accadendo in P set 6. In sostanza, ciò che P set 6 era doing-- eco ciao, nome-- dove aveva un nome della variabile e solo vi chiede di digitare quel po 'di testo. C'era anche un po ' codice aggiuntivo dove comprendeva istruzioni if, che possiamo fare in questo momento. Possiamo dire, se esiste, che è una funzionalità all'interno di PHP, _GET Con la sottolineatura, "nome" - che è fondamentalmente dicendo, "se il nome è stato riempito in" perché avremmo potuto appena cliccato il pulsante di inviare il modulo, senza digitare nulla in quel campo. E ci avvolgiamo che nella nostra amichevoli parentesi graffe. Possiamo avere un'istruzione else. E questo è tutto all'interno dell'angolo di PHP Staffa, punto interrogativo, parentesi angolare, se vuoi. E ora vedremo se questo funziona. Continuo aspettando che il debug e merda su di me, in fondo, ma non è ancora. Forse questo si perché ho parlato. Sì. Lo ha fatto, in effetti. Quindi, nulla sta rivelando. Questo perché di qualcosa che non va che ho scritto nel codice PHP. E ho citato il debug è difficile perché in PHP, abbiamo non compilarlo in anticipo e il compilatore non era come, qui è dove i vostri errori sono. Ma cosa possiamo fare è-- fare la gente ricorda come guardare i diversi network richieste che PHP-- o che i siti web inviare? [? Malin?] Ha fatto questo a lezione una o due volte. Ti ricordi dove andiamo a trovare i diversi debiti e 200 OKs, tutti questi codici che vengono inviati attraverso HTTP dalla pagina web alla pagina web? Qualcuno ricorda dove andiamo a fare questo? PUBBLICO: Page Source. SAM Levatich: fonte pagina. Di preciso. Se andate a pagina sorgente-- perfetto. Così Page Source tira su l'ispettore. E sto utilizzando Safari. Molti di voi probabilmente prevede di utilizzare Chrome o Firefox. Ma finché sei in qualsiasi browser-- moderno e sentitevi liberi di seguire lungo, se vuoi. È possibile digitare questa codice o basta guardare dentro il set P 6 directory per alcune cose simile. hello.php è ciò che siamo attualmente lavorando su emulare. Quindi ci sono una varietà di schede. Possiamo guardare tutte le risorse. Siamo in grado di vedere il codice sorgente. Così sembra che non ha ottenere corpo oltre alla fine. Ha trovato un errore in PHP ed è fermato il caricamento della pagina web intero. Non abbiamo neanche avere una fine tag per HTML o nulla. E se guardiamo la rete, possiamo vediamo che ci stanno inviato una richiesta. Questo è il dominio. Questo è l'indirizzo. Si tratta di un documento. Stiamo usando il metodo get. Ed è rosso. O, era rosso quando ho non è stato selezionandolo. Come faccio a deselezionare esso? Beh, era rosso. Mi permetta di rinfrescare. Eccolo. Ora è rosso. Quindi è rosso, che significa non è riuscito, che è male. Quindi cerchiamo di esaminare il motivo per cui ha mancato. Quindi tutto ciò che il Page Source può fondamentalmente dirvi è la vostra cosa non ha funzionato, che possiamo già vedere. Così idealmente ci sarebbe uno strumento più utile. E ci sono alcune estensioni del browser che permettono di eseguire il debug PHP, ma non stiamo andando a essere iscritto una tonnellata di PHP, quindi è probabilmente solo migliore di guardare attraverso il codice con attenzione e solo fare in modo che non sta facendo altro. Quindi cerchiamo di vedere se il formato di questo if è dove è il problema. Voglio caricare il backup qui. Ciao. Quindi c'è un problema. Così per la sintassi corretta di PHP, PHP sta andando di essere simile al C in che vedrete loop. Vedrai se dichiarazioni. Vedrete tutti questi amici che sei diventato familiare con nel corso di questo CS50 semestre. Ma il modo migliore per capire come fare qualcosa in PHP è quello di google o per guardare alcuni esempi di codice PHP perché sai la funzionalità. Sai quello che si può fare con il programma. È possibile loop. Potete ciclo tutte le volte che si desidera. È possibile ciclo in tutto i tipi di modi diversi. È possibile creare funzioni. È possibile creare funzioni che chiamare altre funzioni, funzioni che si definiscono. E avete nomi per questi concetti. Hai ricorsione, loops, se, altri flussi di controllo. E così Google è il tuo migliore amico. Anche dire, "se PHP dichiarazione "e ci sarà essere tonnellate di post con risposte ad altre persone che avuto domande simili a voi, che è solo agli inizi con PHP e sono curioso di sapere una cosa sintassi. Perché abbiamo il lusso di essere in grado di guardare il codice in P set 6, abbiamo effettivamente tiriamo su e vediamo che OK, ecco qualcosa di interessante. Quindi questo è quello che in realtà sembrava in P set 6. Quindi, se andiamo attraverso questo, possiamo vedere che abbiamo ha ottenuto molti di questi piccoli Bit punto interrogativo PHP-simili. E non ci sono parentesi graffe. Ci sono due punti. E ci sono ricci bretelle in PHP, ma questo è un formato e un modo di fare PHP che funziona bene con HTML perché come avrete capito, stiamo chiudendo fuori questi PHP bits-- il elses e IFS e tutti che-- e poi stiamo inframmezzando HTML al loro interno mentre ancora in seguito alla flusso di controllo definito da PHP. Così sto solo andando a breve passeggiata attraverso questo perché è un sacco dello stesso concetti che stavamo facendo prima. Abbiamo se non vuoto, parentesi, _GET_GET ["name"]. Questa è tutta la stessa roba. Stiamo utilizzando il dizionario che _GET PHP invia su richiesta di forme, perché sono i parametri di azione, e il metodo è ottenere. E poi quel che finisce così. Il colon è un significante di fare proprio questo se l'istruzione if restituisce true. E 'come una parentesi graffa. Ed infatti, è una graffa in altri linguaggi come Python, che si possono verificare se solo farlo per il vostro progetto finale. E poi questa linea, ciao. Poi abbiamo questa cosa strana. Abbiamo più staffe. Non c'è HTTP there-- o PHP, mi dispiace. Ma c'è un segno di uguale. E poi abbiamo una funzione, htmlspecialchars (_GEThtmlspecialchars (_GET ["nome"]). Questo è un po 'come un altro versione avanzata di eco. Come avevamo eco come un modo per stampare le cose in PHP. Questa è una funzione che è definita in PHP che si occuperà di ancora un po 'brutto caratteri e valori di byte che si poteva passare. E 'sempre più sicuro di utilizzare questo. Ma l'eco farà il lavoro bene se non siamo che fare con qualcosa di troppo brutto. E così questo ha lo stesso effetto di fondo, questa roba tra la domanda marchi viene valutata da PHP. htmlspecialchars restituisce un bel HTML valore stampato di _GET_GET ["nome"], vale a dire tutto ciò che abbiamo digitato in forma. E poi dirà ciao, spazio virgola e quindi che. Che cosa tutto tra le parentesi angolari sarà sostituito da qualunque htmlspecialchars mette fuori. Quindi questo è fondamentalmente simile per quello che stiamo facendo. E abbiamo un'istruzione else che è ciao mondo, che ha un senso. Così ora torniamo al nostro codice e vedere exactly-- oh. Ho detto esiste, che non è una cosa che volevamo fare. Abbiamo voluto dire che non vuoto. E quindi questo dovrebbe lavorare un po ' po 'meglio, non _GET_GET vuoto ["nome"]. E questo parentesi graffa corrisponde a quello parentesi graffa. Abbiamo i nostri parentesi graffe qui. echo ciao _GET ["nome"]. Vediamo se funziona un po 'meglio. Stiamo ancora in esecuzione il nostro server. Ciao Jason. Ciao Jason. E ha funzionato questa volta. E così che è una prova che si può davvero utilizzare le parentesi graffe che si conoscere e ad amare in codice PHP in HTML. Il codice PHP fornito voi nel pset 6-- pset 6-- fornisce un altro modo di facendo la stessa cosa. Così ora abbiamo il potere. Abbiamo la funzionalità da implementare il codice PHP che abbiamo visto nel pset 6 da noi stessi, in fondo. Prima di passare, quali sono alcuni dei le domande che avete a questo punto? Sì [incomprensibile]. PUBBLICO: Quindi nella versione in pset6, quando lo si esegue, c'è uno spazio. E posso vedere dove lo spazio è dopo la virgola. [Incomprensibile] inizio la parentesi aperta. Come si fa a incorporare lo spazio in il modo in cui avete scritto i vostri codici? SPEAKER: Questa è una buona domanda. E quindi cerchiamo di capirlo. Quindi questo è veramente una buona domanda e uno che non ho considerato. Ma facciamolo insieme. Quindi, prima di tutto, cosa Sto facendo con eco è quando abbiamo appena eco ciao, viene emesso ciao. Se abbiamo eco ora questo ottenere su un separato la linea, esaminiamo cosa accade. Quindi clicchiamo questo. Noi continuiamo a dire, ciao Jason. Così ancora una volta, non abbiamo questo spazio. E questo perché, in PHP, quando abbiamo eco, non importa quante spaces-- no, non il V-- non importa quanti spazi mettiamo in qui-- se ora caricare il nuovo, hi Jason. Sì, ci vediamo, tutti coloro spazi GOT mangiati. E questo è qualcosa che la funzione eco fa. Quindi, per prendersi cura di quello spazio, e questo è uno dei motivi perchè non si usa eco e si utilizza invece htmlspecialchars. Sono curioso di ciò che sarebbe succederebbe se abbiamo fatto questo dove siamo rinchiusi uno spazio in una stringa. Non sono sicuro di quello che onestamente succede quando faccio questo. Ecco, questo è un modo. Questo è un modo per prendersi cura di esso. Se si avvolgono lo spazio in una stringa, allora lo spazio sarà in uscita bene da eco. La cosa più sicura da fare è fare htmlspecialchars. Questa è sempre la scommessa sicura. Ma ora abbiamo un modo per fare con echo se necessario. E in un modo simile, possiamo eco nuove linee, tutto il genere di roba che si ha familiarità facendo in PHP. Chiunque altro, quali sono più domande che altre persone hanno a questo punto su PHP? Se la gente ha mostrato un po 'tardi, Sono felice di stare dopo un po ' e parlare di alcune delle dall'inizio. Ed è anche tutto livestreamed, e archiviati, che è pazzo. In ogni caso, così ora facciamo qualche cose più avanzate con PHP. E una delle prime cose che si sono stati introdotti a in C era per cicli. E PHP ha una più potente per ciclo chiamato il ciclo foreach. E sembra che questo-- per ogni vuoto come vuoto, parentesi graffe, fare la cosa. Quindi, questo è fondamentalmente una scorciatoia. Vedere, il ciclo for come costruzione sintattica è stato ideato in C e nell'assemblaggio lingua e cose del genere. Ideato in C, appunto, come una scorciatoia per molti tipi di loop che la gente vedere. Come quando hai scritto un ciclo, ci era spesso una fase di inizializzazione eseguito proprio all'inizio, un condizione in cui il ciclo si stop-- e questa è la caratteristica questo è solo in un ciclo while, o che qualche tempo ha esattamente solo che Caratteristica-- e poi un passo l'incremento alla fine. E così che ci si ritrovi spesso la scrittura di codice come il seguente. Io vado a cancellare una parte di questo. Ma se stiamo scorrendo caratteri in un array, per esempio, come abbiamo ha ottenuto un array di caratteri. Mi dispiace per riportare C. Lo so, pensavi di fatto. Ma è solo per lo scopo di imparare PHP, lo prometto. Quindi, se avete una str char di lunghezza di 8, e facciamo dire che dice Hellooo con un valore null finale. Grande, in modo che la nostra stringa. E poi abbiamo avuto un ciclo for. Abbiamo int i è uguale a 0. E vogliamo uscire quando str di i non è uguale a uguale a null, perché usciamo quando è uguale a zero. E poi facciamo i ++ ad ogni punto del ciclo for. Fare qualcosa con str di i. Così la formula di base è stato, abbiamo avuto questo array che abbiamo voluto trattare come elementi separati. Ma quello che abbiamo dovuto fare è che abbiamo dovuto fondamentalmente creare un intero separata variabile che è stata contando ogni volta siamo andati attraverso il ciclo. E poi dovremmo quindi chiamare strstr [i] quando ciò che realmente voluto fare è solo andare carattere per carattere, giusto? Noi non vogliamo incrementare un intero e quindi utilizzare tale intero per accedere a ogni personaggio singolarmente. Vogliamo davvero carattere per carattere. E così per ogni intelligenza calcola che per noi. Se abbiamo un array, che possiamo dichiarare in PHP come solo-- se abbiamo una variabile chiamato, chiamiamolo array. I miracoli di no battitura, è come qualsiasi altra variabile. E 'solo un array. E abbiamo un po 'di [incomprensibile] come 1, 2, 3, solo una sorta di matrice inizializzato. Va bene, non gli piace la mia foreach. Ma se in realtà foreach-- Ho scritto che un po 'sbagliato. Ci sono due modi per fare un ciclo foreach. C'è la sintassi e il come sintassi. E stiamo andando a fare in prima sintassi, non come. Questo è il mio errore. Num Così foreach in ordine, eco num. E PHP sta urlando a me per qualche motivo. Si tratta di trovare un inaspettato in in qualcosa, che è un po 'di fastidio. Ma faremo capire perché questo è in un momento. Quindi non piace che. Proviamo ad usare il come. Predilige la sintassi è come sembra. Allora, facciamo gamma foreach come num. Così una piccola spiegazione di ciò che è appena successo è il come sintassi è saying-- ben prima, diamo un'occhiata a ciò che viene stampato fuori. Quindi apriamo il nostro IDE. Siamo andate qui. Noi diciamo, Ciao Jason. E lo ha fatto 123, che erano i contenuti dell'array che abbiamo creato sulla parte superiore. Così tuffarsi in questo ciclo foreach, abbiamo un array di variabile chiamata che è una serie di tre numeri. E poi stiamo facendo foreach array come num, eco num. E questo è più intuitivo che una per lop. Stiamo dicendo, di trattare ogni le cose nella matrice come num, Voglio che tu mi dia num. E questo è esattamente quello che sta facendo. PHP sta calcolando che quando si dice matrice foreach, e hai a che fare con una serie, cosa si sta andando a voler iterare è i personaggi di tale matrice, è il interi di tale matrice, è gli elementi di tale matrice. Ed è che ti permette di memorizzare quelle variabili come num, e num poi appena uscita subito piuttosto che dire, Ho una variabile denominata i, e allora voglio uscita strstr [i]. E così che ci permette di fare cose interessanti. Come in fondo non abbiamo per creare queste variabili come i e fare tutto questa roba l'incremento alla fine. PHP si prende cura di tutto questo per voi. Così ora parliamo di come foreach si applica al nostro dizionario _GET. Quindi dovremo commentare questo fuori in fretta. Così abbiamo la nostra gamma _GET. Abbiamo questa variabile. Ed ha alcune cose in esso. In questo momento, abbiamo solo una variabile essere passato ad esso, che è il nome. Ma se premere Invio, ora possiamo avere due variabili. Possiamo avere nome e l'età, per esempio, se vogliamo ottenere l'età e anche il nome di una persona, strano a dirsi. Così ora _GET sta per essere una dizionario con due elementi, con due coppie di valori chiave. E la prima key-- ho intenzione di scrivere questo uno sul tabellone troppo. Abbiamo il nostro dizionario è _GET. Ci dispiace, è è un po 'difficile da vedere. Ma all'interno del nostro dizionario abbiamo nome, che sta per essere qualcosa che ci è dato. E avremo età, il che è anche sta per essere qualcosa che ci è dato. E questo è l'interezza del nostro dizionario. Quindi ha due elementi in esso. E così perché foreach loop sono intelligenti, abbiamo potrebbe pensare, e correttamente potrebbe pensare che foreach può scorrere questo dizionario, stampando i valori indicati per nome e l'età. Quindi cerchiamo di infatti fare proprio questo. Costruiamo un ciclo foreach. E abbiamo intenzione di fare per _GET come. E stiamo andando a fare quanto segue. Così vediamo che cosa succede se si digita solo la parola, e poi dire la parola eco. Stiamo anche andando a echo una nuova linea solo per rendere un po 'più chiaro, cosa sta succedendo. Quindi cerchiamo di vedere. Non è mi dà errori. E noi chiudiamo questo. Sul nostro sito, si sta andando a fare molti che nel corso di pset7. Quindi diciamo che il mio nome è Sam. La mia età è di 45. Non è. Ma esso stampa, come previsto, Sam 45. E così si noterà che cosa ciclo foreach did-- qui, torniamo a quel modo che sia sulla board-- otteniamo _GET come parola. E c'erano quattro cose in _GET. Ma stampato solo due cose. foreach, essendo la sua auto intelligenza, scontato che quello che volevamo era i valori, non le chiavi. Ma c'è un modo che potremmo stampare le chiavi e, se volessimo. Se volessimo sapere anche cosa queste variabili sono stati chiamati, c'è un modo che noi possono accedere a questo. E il modo per genere di farlo, così possiamo dire, lascia davvero dividere in coppie di valori chiave. Quindi vediamo cosa succede adesso. Così abbiamo chiave. Abbiamo valore. Abbiamo un altro nuovo Linea per migliorare la leggibilità. E vediamo cosa succede quando lo facciamo ora. Non so quanti anni Jason è. Jason 15. Così abbiamo nome Jason, 15 anni. Così siamo stati in grado di accedere alla chiave e coppie di valori di questo dizionario semplicemente dicendo punti chiave per il valore. E questo è un sintattica foreach po 'di zucchero, che permette di accedere le cose nel dizionario. Quindi speriamo che questo tipo di risalto la potenza del ciclo foreach. Si può tranquillamente tiro tutto ciò che iterabile sembra, come tutto ciò che ha di più elementi come un array, come un dictionary-- quelli sono due cose principali lavorerete con sia nella vita che nel pset 7. Così si può buttare quella roba esso, e si capirà cosa si vuole fare con esso. Si dirà, OK, ho intenzione di ottenere queste cose ai dati che è stato passato a me. E questo è qualcosa che si sta intenzione di utilizzare un sacco di in pset 7. Io vado a scorrimento rapido giù solo per vedere dove sono a. Le persone hanno domande a questo punto? Domande a tutti? Sì? PUBBLICO: Quindi, con la chiave e il valore, si potrebbe chiamarlo qualcos'altro e sarebbe ancora lavorare? SPEAKER: Oops. Wow, ho completamente cancellato tutta la linea. Ottimo lavoro. Quindi a, a. Chiave e il valore è solo una convenzione. E 'utile. Si potrebbe ottenere qualche disegno punti, forse alcuni punti di stile per farlo, perché trasmette davvero l'intenzione. Ma noi diciamo una e Yarp. PUBBLICO: Non è necessario cambiare nulla nel file HTML per riflettere questo? SPEAKER: Niente affatto. PUBBLICO: E sa solo che a causa della maggiore uguale than-- SPEAKER: Sì. PUBBLICO: Indicatore --that che that's-- SPEAKER: Sì. Questa è una sintassi foreach, ma sì. PUBBLICO: Non ci sono tipi. Così che cosa se si voleva età per essere solo un numero? C'è un modo per farlo? SPEAKER: Ci sono modi per controllare se variabili siano conformi a determinati tipi. Così PHP chiede un po 'di più da voi, perché non ci sono tipi in. Alcuni modi che chiede meno. In un certo senso si chiede di più. Perché se è sufficiente qualcosa in una variabile, non avete idea di che tipo è. Ma se siete intelligenti sulle variabili che si assegnano i tipi di e assicurati che funzioni solo return-- vogliono funzioni al solo ritorno un tipo di valore in modo che si può sostanzialmente si aspettano che la variabile si ottiene indietro da una funzione sarà del tipo che si pensa che sarà, in fondo. Ma ci sono alcuni metodi con la quale è possibile controllare. Non li ricordo la parte superiore della mia testa. Sto aspettando che diventi blu. isint? isstr? Esistono metodi costruito in PHP che può verificare il tipo di variabili per voi. Ma se si assegnano le variabili elegantemente, non si dovrebbe hanno a che fare che troppo in pset 7. Ma esistono tali metodi. E questo è qualcosa che è nella lingua stessa. E non mi ricordo la sintassi precisa. Potremmo anche guardare in su. Ma il tempo è essenziale. avere Qualcun altro avete altre domande? Sì. PUBBLICO: Ho solo un altro. Così lei ha citato il metodo GET, ma lei non ha citato il metodo POST. Stiamo tornando a questo? SPEAKER: Sì, ci sarà essere tornare a quello. Questo è esattamente quello che stavo cercando il mio telefono, che ora si addormentò, ma lo troverò. Basta fare in modo ci ha colpito tutte le note PHP. Sì, non c'è nessuna versione di debug. Sì, abbiamo un paio di cose che che vogliamo fare ora a questo punto. Quindi parlando di POST, che lei ha citato, l'unica differenza tra GET e POST è che ricordo quando abbiamo guardato a questo URL e abbiamo visto, oh, nome equivale ad una e l'età è pari Yarp sono proprio nell'URL lì per noi. POST è un po 'più segreta con il passaggio di informazioni. Quindi, se non si desidera che un utente di conoscere, per esempio, non ha voluto il nome utente e password della persona attualmente collegato da visualizzare in l'URL, che è una cosa ragionevole di non volere nell'URL, perché qualcuno può vederlo. Se si collegano a qualcuno di una pagina, non vogliono il loro URL intonacate lì, perché ciò permetterà alle persone di login solo con l'incollatura di un URL invece effettivamente la compilazione di un modulo. POST è un po 'più riservato. E le uniche cose che dovremo cambiare sono questo metodo, cambiamento da arrivare a postare messaggi. E poi all'interno del HTTP, invece di accedere alla _GET matrice, stiamo andando per accedere al _POST matrice. E noi notiamo che, se apriamo questo ritorno di nuovo, Jason declina lentamente di età. nome Jason, 14 anni. La stessa roba si apre. Ma andiamo all'URL e quelle variabili non ci sono. E il modo in cui POST passes-- in modo da ricordare come guardare il sorgente di una pagina. Andiamo alla rete. Ci rinfreschiamo. E questa è un'altra cosa che POST vi darà avvertimenti circa. Potreste aver visto una scatola, un testo box come questo nel tuo browser. Sei sicuro di volere a inviare di nuovo un modulo? POST è quello che 's l'invio di queste forme. Perché in fondo se hai inviato il tuo carta di credito a qualcuno, che non sta andando a presentarsi nell'URL. Che sta per essere una richiesta POST. Così, quando si aggiorna la pagina, è inviare nuovamente la richiesta posta. Così ora noi vogliamo inviare il formare di nuovo perché non sta andando per creare eventuali acquisti duplicati. E noi notiamo che qui, il metodo che stiamo usando è POST. Ed ha effettivamente il trasferimento byte. Si trasferito 401 di loro. Program piuttosto piccola. Ma non c'è nulla che possiamo vedere i valori che vengono passati. Le pagine web si può vedere, ma non siamo come gli utenti in grado di vedere, a meno che non sei un hacker. Se sei un buon hacker, si può guardare. Se si conosce la base formato del HTML, i valori farà si sono manifestate nelle pagine. Sarete in grado di vedere. I valori saranno lì, sono solo un po 'meno evidente per voi di accesso, fondamentalmente. Dobbiamo più domande su GET, POST before-- quello che stiamo andando a fare dopo è in realtà guardare parte del codice che si sta dando in pset 7, parla di come si utilizza alcuni di questi concetti, e parlare del cose che si sta andando di avere a che fare un po 'di pset 7. Altre domande prima? Altre domande voi ragazzi avete? Grande. Va bene, diamo un'occhiata un po 'alla pset 7, senza dubbio quello che sei tutto più entusiasta. Voglio dire, questo è qualcosa che David passa attraverso un po '. Ma avremo tre directory al superiore, così come un file di configurazione. Questo è per i database, che ce la faremo parlare in circa cinque minuti. Gli include, non è necessario a guardare in questa directory se non si vuole, ma è bello che ci sono tutti i tipi di aiutanti. Helpers è come funzioni utili. E poi abbiamo config, che stabilisce alcune cose su. Ci sono alcune funzioni che ha CS50 scritto che sono in aiuto e di configurazione. E alcuni di PHP che uscite già nei file farà un sacco di più specie lavoro di gambe di ottusi per voi. Come se andiamo in pubblico login.php, che è ciò che si presenta a destra quando si va in pset 7. Vedremo che non c'è questo richiede dichiarazione. E questo un po 'come un affilato includono, hashtag comprendere se siete di una generazione più recente. Ma questo in fondo dice che ho bisogno di accesso a tutte le funzioni in config.php. E si potrebbe avere un bisogno di per ogni sorta di altre cose. config richiede in realtà aiutanti. Così ogni volta che richiedete config, sei anche compreso o che richiedono aiutanti pure. In modo che ti dà accesso a tutte le funzioni interessanti che andremo ad utilizzare, cose come il rendering. In realtà sto andando a facilitare questo in giù un po '. Così la funzione allora siamo andando a piedi attraverso appena prima di passare a SQL un po ' bit è la funzione login.php, appena perché utilizza alcuni degli argomenti che abbiamo appena parlato in PHP. Si vede la prima cosa è che se $ _SERVER. Questa è un'altra variabile globale che si sta andando a che fare con. E 'come _CET e _POST, ma cosa server contiene è questo può farvi sapere se il metodo di richiesta era un GET o POST. Come in precedenza quello che stavamo facendo è solo nel nostro codice che abbiamo scritto, eravamo appena cambiando di essere GET e POST seconda di ciò che il HTML ha. Ma vi sono pagine che possono essere accedere con entrambi i tipi di richieste. E si potrebbe desiderare di fare cose diverse a seconda il tipo di richiesta, proprio come fa login. Modo da poter verificare che la richiesta metodo attraverso chiavi di accesso, attraverso l'utilizzo di una chiave e ottenere la valore di qualcosa nel dizionario _SERVER. Quindi, questo è un altro globale variabili come _CET e _POST. Se è GET, vogliamo rendere il form di login. Render è una funzione che, in fondo appena mette il appropriata HTML e lo passa alcuni parametri. Questo titolo è un parametro che è usato nella visualizzazione, stranamente, il titolo della pagina in domanda, la cosa qui, dire o ciao nel nostro esempio precedente. Ora abbiamo una cosa diversa. Altrimenti se si tratta di POST, abbiamo fare altre cose. Stiamo utilizzando tale metodo vuoto. Non è esiste, è vuota. E abbiamo visto prima, PHP ha una discreta quantità di costruito nei metodi che David will-- se ci sono metodi che sono utili a te, essi saranno avvisati a voi nel cammino attraverso quel David dà alla panoramica inizio, e anche utile pezzi di Zamyla. E 'tornata a tutti. Noi tutti possiamo gioire. scusa è una funzione di nome appropriato che stampa appena fondamentalmente fuori alcuni messaggi di errore, perché CS50 è molto gentile. E ora questo, questo è un po 'complicato perché questo è dove stiamo interrogando il database. Ora noi non abbiamo parlato di basi di dati. E stiamo andando a nel prossimo cinque minuti o giù di lì, il massimo. Ma questa è una funzione che CS50 ha scritto per ottenere un tavolo fondamentalmente da un database che stiamo lavorando con in pset 7. Sono davvero male con la mia indicizzazione a zero oggi. Ma sì, è 7. Così interrogare sta andando a restituire un array, in fondo è il bit chiave. E perché queste cose non hanno dattilografia, quindi righe è un array di array. Perché quando stiamo pensando un tavolo, quello che stiamo andando a fare è, come si è appreso in pset come il gioco del 15, in ogni caso dove si doveva usare un doppio array, abbiamo praticamente avere array di altri array fa un tavolo. E hai righe e colonne. E poi è possibile accedervi come [0] [1], si ottiene il [0] [1]. Cose di base del genere. Quindi quello che stiamo facendo in questa funzione, stiamo chiedendo il database se l'utente che è cercando di login, che sarà inviato attraverso il metodo POST. Vedremo stiamo ottenendo il nome utente da _POST. Faranno hanno inviato, l'utente o, invierà un valore attraverso una forma attraverso POST perché è username e password roba. Stiamo controllando il nome utente a vedere, è questo il tavolo? Perché se un utente accede in, poi il loro nome utente devono essere memorizzati nella tabella di gli utenti che esistono per questo sito. Quindi, in pratica, se il utente è nel database, interrogazione sta per tornare tale riga, che è un array. Ma la parte difficile è che se anche se la doppia matrice è solo una riga, anche se si tratta di un una riga array-- come hai basically-- se hai una dimensione di un array che è in possesso di un altro array, sei davvero fare con una colonna. Ma è ancora trattato come una doppia matrice. Ed è qui che a volte può ottenere difficile, perché abbiamo le righe qui. La nostra variabile è righe. E poi stiamo creando una nuova riga variabile chiamata e impostarla uguale la prima fila di righe. E noterete che commento dice che è la prima e unica fila. Quindi questo è il difficile parte dove ora funziona può tornare molto facilmente array. Non c'è mallocs. Non vedrete mallocs. In modo da non vedere i difetti seg. Ma le funzioni saranno ancora passando intorno array e dati in gruppi. E bisogna stare attenti a ciò che esattamente le funzioni torneranno. E anche se si tratta di un colonna come questo, interrogare è ancora in corso per restituire un doppio array. Quindi, per l'accesso che column-- o può pensare di tutto questo come invertita dal momento che stiamo parlando di righe. Ma per accedere a tale una riga, non si può certo dire righe. Anche se è una riga, si deve non rowsrows [0] per eliminare questo tipo di bit esterna della matrice e avere solo il vostro una riga. Fare alcune altre cose. C'è una funzione chiamato password_verify che verifica la la password che è stata pubblicata. E allora vediamo un altro globale variabile qui, _SESSION. Fondamentalmente id di sessione è come a tenere traccia di se qualcuno è loggato o meno. Così adesso con login.php, stiamo login un utente. Quindi quello che vogliamo fare è che vogliamo dice l'id di sessione è uguale alla riga id, che fa solo senso perché ogni riga avrà un ID diverso numero come parte della tabella. Arriveremo in SQL in un secondo, quindi se qualcuno di questo Sembra un po 'come blah, poi tutto sarà chiarito. Ma stiamo andando a impostare l'id pari a la cosa giusta, la registrazione l'utente. Apologize se qualcosa va storto. E questo è login scopo in la vita come il professor Malan direbbe. Così che era login.php. E un sacco di codice PHP si scrive in pset 7, saranno un po '. Non dimenticare di chmod a le autorizzazioni appropriate. Ci sarà un po 'di che all'inizio della specifica. Ma il PHP che sei scrittura sarà fare cose che è simile a questo. Si sta andando ad essere Accedendo alcune cose che sono dato a voi nel variabili globali di PHP che hanno a che fare con l'attuale utente connesso, se c'è sono state richieste inviate a questo pagina, diverse cose del genere. E sarà anche potenzialmente scorrendo le righe di questa cosa. In una funzione, query diversa non restituire questo doppio array. E se ci sono più oltre un righe in esso, se ci are-- sì, se ci sono più di un file in esso, allora sarà un tavolo. E si potrebbe desiderare di iterare attraverso le file di questa matrice utilizzando il ciclo foreach che abbiamo descritto. Quindi, se si fa foreach su un doppio array, quale sarà il word-- qui, Io in realtà scrivo. Ti scrivo veloce qui. Se abbiamo un foreach di righe come riga, qual è il tipo di fila? Qualcuno sa? Hai capito? Quindi le righe è un doppio array. Così che cosa sta andando a dedurre foreach che vogliamo da questa doppia matrice se stiamo iterando su di esso? Possiamo supporre che fondamentalmente che sta per essere sia elementi, o righe o colonne, fondamentalmente. E così righe e colonne noi può trattare come la stessa cosa. Fondamentalmente quello che il ciclo foreach sta andando di fare è che sta andando a restituire le righe. riga sta per essere di tipo fila, mentre le righe è un doppio array. Quindi, se si dà foreach un doppio array, è non andare a iterare più di un livello profondo. Che è sostanzialmente quella di dire se ci sono otto celle in questo table-- 1,2, 3 4, 5, 6, 7, il 8-- ciclo foreach non è per passare attraverso ciascuna di queste cellule. Quello che il ciclo foreach farà era che passerà attraverso questa riga, dare a tutta questa fila. E poi andrà attraverso quella riga. Così itera solo livello. Se si aggiunge un nidificato ciclo foreach, allora può trattare ogni riga restituita da righe, si fanno fila foreach come elemento, diciamo. E allora si potrebbe riecheggiare l'elemento. Quindi questo è un breve piccolo ripasso su come si potrebbero utilizzare foreach loop nel contesto di query. Ci sono domande su PHP? Qualsiasi cosa, prima di passare a parlare di SQL e il divertimento di database? Sentirsi bene? Sentirsi bene. Tutto ok. Passiamo di nuovo al PowerPoint, che probabilmente si dimentica. SQL, yay. Le persone che sono nella mia sezione tipicamente sapranno che sottovoci acronimi sono sempre solo le prime parole Penso a quella partita che algorithm-- che sigla. Non è un algoritmo. Quindi SQL è un database. E 'un linguaggio che funziona con i database. E tutti i database sono è tavoli, almeno nel senso che SQL li rappresenta. Un altro modo di pensare dei database è i database sono un insieme di chiavi e valori fondamentalmente. È possibile pensare a un database come un dizionario e anche come un tavolo. Fondamentalmente si tratta di un modo per associare dati diversi con altri dati, spesso attraverso righe e colonne. E questo è il modo questo è SQL funziona meglio. Quindi questo è un esempio di una tabella. Ho alcuni esempi di persone nel mio settore, che Non ho avuto il tempo di cambiare. Ma abbiamo cose come ID, nome, superpotenza, e città natale. Non so dove chiunque è da nella mia sezione, quindi sto solo andando ad assumere tutti sono da New York Città perché ho un alto statistico probabilità di essere corretto. SQL avrà automaticamente cura della colonna ID per voi. Se si inserisce una nuova riga in un database SQL, si incrementa che Numero ID e solo attaccare praticamente come cinque nomi, superpotenza, città natale, chi sull'estremità di detta tabella. Così ID è una colonna vi non devono preoccuparsi. Ma, come nel caso di login.php, quando stavano ottenendo l'ID di sessione da una tabella e usando solo ID, ID è un modo per identificare univocamente un elemento di un database. Quindi, se avessimo due Sams, entrambi che ha insegnato CS50, ed entrambi di chi erano da Milwaukee, quelli sarebbero hanno ancora numeri identificativi distinti e quindi essere distinta contesto della tabella. Quindi questo è ciò che SQL sta trattando con, lavorando con nel back-end. Ora questi sono i quattro comandi che avrete bisogno di lavorare con SQL. E li ho vomitato su una diapositiva. Ma stiamo andando a passare attraverso tutti loro individualmente. Il primo comando è UPDATE, che fa quello che ci si potrebbe aspettare. Diciamo che avete alcuni dati in la tabella che è fuori di data. Come se si sta tenendo traccia dei nomi delle persone e matura, se qualcuno di l'età aumenta, poi si sta andando a voler andare in e aggiornare l'età proprio di quella persona. Per un esempio che funziona con la nostra prima table-- non preoccuparti di scrivere tutto questi comandi allo stesso tempo. Ma se hai aggiornamento giù, che sarà buono per questa parte, perché stiamo andando a tornare al tavolo. Quindi, se torniamo al tavolo, diciamo qualcosa che è accaduto è stato ci fu un terremoto o una linea di faglia che ha diviso direttamente attraverso New York City. E volevamo aggiornare tutti che viveva a New York City. Avevano tutti a muoversi in Pennsylvania. Questa non è una città natale. Avevano tutti a trasferirsi a New Haven. Ci siamo. Così tutti a New York si trasferisce a New Haven. E così che è qualcosa che è modifica tre righe in questa tabella. Ma in SQL, si può fare che in un solo comunicato. Così torniamo a UPDATE. Lasciatemi Quick Erase di nuovo questa scheda. Quando stiamo parlando aggiornamento, ci sono alcune parti della sintassi che sono fondamentali. Beh, tutto della sintassi è la chiave. Ma la roba in verde è facoltativo. Il bianco sono necessari, nomi predefiniti come. E l'azzurro sono cose che variano a seconda del tavolo. Ecco, questo è quello che sta succedendo con lo schema di colore qui, lassù. Quindi, se vogliamo aggiornare solo le righe delle persone che vivono a New York, così che cosa faremmo se dicessimo UPDATE? Così tavolo è dove abbiamo messo il nome della nostra tavola. Diciamo solo che il nome della nostra tavola è un tavolo. Quindi vogliamo aggiornare tavolo uno. E noi vogliamo set-- cosa vogliamo impostare? Bene, noi vogliamo dire, PHP così column-- tratta righe come identificatori univoci. E poi colonne sono i diversi campi di quegli elementi del database. Quindi il primo elemento del database ha un nome di Sam, superpotenza CS50, e una città natale di Milwaukee. Quindi, se detto insieme, diamo un'occhiata a i parametri di nuovo quel set prende. Abbiamo colonna è uguale al valore. Quindi, vogliamo dire un po ' column-- che ricorda è un field-- vogliamo vedere un campo pari a qualcosa di nuovo. Quindi, se abbiamo appena detto aggiornamento Tabella 1, il nome del set pari Elliot. Ottenere alcune persone della nuova sezione su questo. Ma se abbiamo appena fatto l'aggiornamento tabella 1 Nome set pari Elliot, quale sarebbe l'aspetto tavola come dopo? La gente ha qualche idea? Già. PUBBLICO: Tutto in quella fila sarebbe diventato Elliot. SPEAKER: Tutto in quale riga? AUDIENCE: Nella prima riga. SPEAKER: Nella prima riga? Perché la prima fila? Non voglio dire a prendere su di voi. PUBBLICO: Forse tutto in tutto il tavolo? SPEAKER: Tutto in l'intera tabella, sì. E questo è esattamente giusto I perchè-- è stato appena aiutare fuori un po ' there-- perché abbiamo omesso la clausola facoltativa WHERE. Se non si dispone WHERE clausola, che cosa farà questo comando è funzionerà con ogni singola riga nella tabella. Il nome di tutti sarà diventare Elliott, in fondo, che Elliot è molto felice. Oppure Yanni, uno dei due. Ma il nome di ognuno cambierà. Così il nostro modo di utilizzare il WHERE clause-- e questo vale per tutti i wheres che sono in ciascuno di queste cose diverse. Così si noterà che SET ha colonna valore uguale. E così fa WHERE. Ma questi sono diversi tipi di dichiarazioni. Così colonna è uguale al valore nel SET è in assegnazione. Come stiamo dicendo che vogliamo per impostare il nome uguale a Elliot. Ma nelle clausole WHERE, queste sono affermazioni di uguaglianza. Quindi diciamo che abbiamo voluto solo cambiare il nome della persona a Elliot se il loro nome era Ryan, diciamo. Così, quando diciamo DOVE nome uguale a Ryan, che sarebbe successo unico cambiamento l'nome-- solo sarebbe modificare il campo nome in righe dove il campo del nome è uguale a Ryan. Quindi, se avessimo più persone chiamato Ryan, tutti i loro nomi cambierebbe di Elliot. Questo è simile all'esempio di se una linea di faglia divide New York City e ognuno ha a trasferirsi a New Haven, il modo in cui siamo in grado farlo in una sola affermazione è UPDATE table1 SET città natale = New Haven dove città natale è uguale a New York City. Questo è il potere di l'istruzione UPDATE. Siamo in grado di selezionare qualsiasi numero di righe attraverso affermazioni vere sui campi in quelle righe. Non possiamo dire insieme UPDATE table1 name = Elliot DOVE riga = 1, tranne che possiamo se diciamo ID = 1. Quindi stiamo andando a essere lavorando con l'uguaglianza di campi, parità di colonne. Ma utilizzando il campo ID è un modo per selezionare i singoli file in particolare, perché il campo ID è un unico identificatore in un database SQL. Così come l'aggiornamento fila una, ID è uguale a 1. Aggiornamento seconda fila, appena cambiare quel numero di ID. Ma il potere della WHERE è che noi può aggiornare le cose in base a quello che il loro valori correnti di certe cose. Si Elliot? PUBBLICO: E se volete a-- ancora una volta, questa è un'altra questione. Ma la mia prima domanda era, dove sta succedendo questo? Dove sto aggiornando questo? Si tratta di un codice PHP? SPEAKER: Dove si aggiorna, sì. Stiamo andando a parlare su dove tutto questo succede sorta di una volta che andiamo attraverso tutti i comandi. Ma ciò che è necessario sapere per ora è fondamentalmente che il database SQL esiste come qualcosa per essere accessibile dalla query funzione, che definisce CS50. Quindi, se si utilizza la funzione di query, è possibile accedere a questa tabella. Quindi vi sarà l'invio questi comandi al vostro tavolo in file PHP attraverso la funzione di query. Si può anche giocare con il tuo tavolo direttamente. E questo è il modo migliore per provare questi tipi di comandi. E andremo attraverso esattamente come per fare questo in appena un po '. Ecco, questo è il comando UPDATE. Il resto dei comandi stanno per essere una sorta di simile, lavorando su cose simili. Il INSERT INTO è probabilmente i più diversi da UPDATE. Ho intenzione di lasciare che lassù per solo un po 'e lavoro qui. Così INSERT INTO, vedrete tale tabella è ancora lo stesso. Vuoi INSERT INTO. La capitalizzazione, SQL è case insensitive. Quindi non c'è bisogno di capitalizzare queste cose. Per convenzione, le parole in bianco sono capitalizzati. Ma ho anche loro colore codificato. L'unica ragione che capitalizzare quelli in cui li sta digitando è solo per sottolineare che coloro che sono costanti. E così è possibile guardare la capitalizzazione o il fatto che li ho colorato in modo diverso. Così abbiamo INSERT INTO, facciamolo di nuovo table1. Questo è tutto su una riga. Sto solo lo separa da le diverse affermazioni. Quindi non preoccuparti per il fatto che table1 ha fatto sulla seconda linea. Quindi vogliamo inserire IN TABLE1 alcuni valori. E noterete opzionale bit, che io riesco anche a un secondo. Così abbiamo VALORI. Quindi diciamo che vogliamo aggiungere Andi al nostro tavolo, perché ci manca Andi. Andi è malato. Quindi aggiungiamo Andi al nostro tavolo. Ricordate che il numero ID viene aggiornato automaticamente. Così gli unici campi che bisogno di preoccuparsi sono nome, superpotenza, e città natale. E così il modo in cui lo facciamo, guardando il nostro sintassi, è ABBIAMO appena ricevuto una parentesi, con la virgola valori separati, ciascuno dei quali è un valore. Quindi, se volessimo inserire Andi nella nostra tavolo, tutto quello che dobbiamo fare è giusto Andi. Cosa c'è di superpotenza di Andi, persone nella sezione di Andi? A lei piace il volo, o come velocità, o qualcosa del genere. Che cosa abbiamo già lassù? Abbiamo CS50, volo, velocità e forza. PUBBLICO: Il viaggio nel tempo. SPEAKER: Il viaggio nel tempo, sorprendente. Così abbiamo Andi, tempo viaggio, e la sua città natale. Questa è una bella domanda. New York City, a meno che qualcuno lo sa. Sono tutti da New York è la lezione da asporto a partire da oggi. Quindi questa affermazione sarebbe inserire, come quinta fila, con il tempo di percorrenza superpotenza e una città natale di New York City. Ma il campo facoltativo è fondamentalmente un modo per specificare esattamente quali colonne si desidera inserire le cose in. Il modo in cui lo stiamo facendo ora, Andi, viaggi nel tempo, New York City, sta nell'ordine esatto della nostra nome table--, superpotenza, città natale. E se si voleva fare qualcosa di diverso da quello, come dici tu non sai superpotenza di qualcuno, come come non sapevo di Andi superpotenza all'inizio. Quindi tutto quello che sapevo era lei il nome e la sua città natale. Cosa potevo fare è che potevo fare-- io cancellerò questo rapido. Voglio solo aggiornare le colonne. E questo è dove opzionale elenco di colonne entra in gioco. Voglio solo aggiornare il nome e città natale. E poi dirò VALORI. Farò Andi e New York City. Se avessi omesso l'elenco delle colonne e appena fatto queste due cose, dove sarebbe New York sono andati? Quale colonna sarebbe New York Città sono stati messi a? La gente ha qualche idea? Superpotenza, esattamente. Quindi questo sarà solo andare in ordine. E una volta raggiunta la fine del lista, sarà solo smettere di riempire le cose in. E i valori che essa ci limiteremo a tutte le colonne sarà solo NULL. Quindi perché abbiamo specificato nome e città natale, stiamo andando ad avere ID 5, nome Andi, superpotenza NULL. Così superpotenza è un valore non inizializzato. Non sarà necessariamente ottenere il stessi errori Valgrind se si tenta e accedervi. Tutto sarà bene azzerato fuori, perché è un valore NULL in SQL. Questa è una costante. E poi città natale sarà New York City. Ecco, questo è il comando INSERT INTO. Prima di passare, c'è altri due comandi. Le persone hanno domande su UPDATE, su INSERT INTO, su SQL generalmente prima di passare sulle nostre punte finali? La gente si sente buono, ottimo. Lo adoro. Quindi parliamo di SELECT. Andando fossa UPDATE qui. E SELEZIONA sarà molto simile. L'obiettivo di SELECT, Scopo di SELECT nella vita è quello di dare un po 'di colonne che soddisfano determinate condizioni. E quando dico soddisfare certe condizioni, la tua mente potrebbe subito tornare a quella clausola WHERE che è venuto in UPDATE. E quella clausola è esattamente lì in SELECT. Se non mettiamo WHERE clausola e diciamo SELECT name, hometown-- farro che un po ' nome wrong--, città natale FROM tabella1. Se ci limitiamo a dire che, ciò che SELEZIONA sta per darci è la sua ci darà un double-- un tavolo, piuttosto. Un doppio array se siamo pensare in PHP sensi. Ma è solo andare a darci una doppia serie di due nome columns--, e città natale. E ignorerà ID. E ignorerà superpotenza. E sarà solo darci ogni sola fila di quel tavolo. Quindi, se abbiamo appena inserito Andi, avremo Andi. E avremo l'originale quattro. Se sono stati aggiornati, che sarà si rifletterà, eccetera, eccetera. Quindi questo è perché noi non utilizzare la clausola WHERE. Ma possiamo usarlo esattamente allo Allo stesso modo abbiamo usato in UPDATE. Se vogliamo soltanto una tabella dei nomi e super poteri di persone che vivono a New York, siamo in grado di eseguire un'istruzione come SELECT name, superpower-- Sto solo andando a lasciare che-- DA table1 DOVE città natale = New York City. Quindi questo sta a dimostrare che è possibile ottenere totalmente diverse colonne, e poi mettere le colonne che non sei anche tornare nella clausola WHERE. Non abbiamo nemmeno vogliamo che il città natale di tutti. Ma noi vogliamo il nome e la superpotenza di persone la cui città natale è New York City. Ecco, questo è qualcosa che può fare con WHERE clausola è che possiamo fare con le colonne che non necessariamente vogliamo indietro. Nello stesso modo in UPDATE, possiamo trattare con colonne che noi non necessariamente desidera aggiornare. Possiamo aggiornare la città di tutti chi è nome è Sam, per esempio. Possiamo aggiornare la città di tutti il ​​cui ID è il numero 2. Quindi, solo aggiornare il città della seconda fila dove non abbiamo a che fare con necessaria la domanda comune. Ed eliminare è, come ci si aspettarsi, DELETE FROM table1. E poi abbiamo un altro clausola WHERE. Quindi possiamo dire WHERE ID = 1. Eliminare la prima fila. E DELETE sarà sempre eliminare una riga, o elimina alcuni numero di righe. DELETE FROM tabella WHERE città natale = New York cancellerà tutti a New York City. Questo se ci fosse un improvviso tragica peste e si voleva solo per rimuovere tutti dalla tabella che vissuto in una certa città che è stato colpito dalla peste. Riposino in pace. Questi sono i quattro comandi SQL che sarà necessario utilizzare. Si potrebbe anche non essere necessario usarli tutti. Ma questi sono i quattro che CS50 vi aspetta per stare bene con l'andare in sia quiz 1 e anche pset7 e pset8. C'è di nuovo solo quel tavolo. In questo, superpotere di Roy ha stato aggiornato a raggi laser, che è un esempio non ho usato. Non so quale Roy preferisce, ma la forza. Roy ha una superpotenza di forza. Katherine non ce l'ha fatta oggi. È un peccato. Ma lei ha super velocità. Bene che era PHP. Prima di parlare di MVC, fa Qualcuno ha domande su PHP? Ora SQL, PHP o se improvvisamente trovare una domanda su PHP? Grande. Va bene, siamo tutti set poi. Così parla un po ' su Vista Modello controller, torniamo a qualche della roba in pset7. Allora, cosa vista del modello Controller è-- Io non sono andando a salvare i miei cambiamenti al login perché totalmente massacrato esso. Ma in fondo abbiamo due cose separate in corso. Abbiamo un pubblico directory che contiene il codice che sta per essere giustiziato e le pagine web che saranno visitati. E abbiamo anche questa directory viste. E viste contiene modelli. Questo è ciò che la funzione render-- abbiamo visto il rendering la funzione in un mucchio di codice PHP che CS50 ha già scritto per te, che prende in determinati parametri. Cosa che il codice sta facendo sta sta andando in vista, che sono insiemi di come il codice HTML prewritten, ed è inserendo valori in certi luoghi. Questo è il modo quando si andare in CS50 Finanza, la stessa intestazione è in ogni pagina. Lo stesso piè di pagina è in ogni pagina. Questo è perché il modo che rendono le opere è che sarà patchare automaticamente in tale intestazione e visualizzatore che potete trovare nelle viste. In realtà ci siamo in grado di andare in testa, e guarda, è un file HTML con una testa. Ha ottenuto alcuni fogli di stile. Non avete bisogno di guardare i CSS per pset7 se non si desidera. Ma si può modificare se vuoi, fanno il vostro Finanza aspetto un po 'diverso. Essa ha avuto un po 'di PHP l'intestazione un po 'a vedere se c'è un titolo diverso si dovrebbe mettere in questa intestazione. Ma solo alcuni altri script, e collegamenti, e altre cose. Testa finisce, corpo inizia, e oops, abbiamo questo po 'fine' strano. E c'è un div, proprio come una sorta di elemento senza forma che ha un'idea di mezzo. E poi quando vediamo piè di pagina, abbiamo la fine di un div. Abbiamo un fondo, che è dove il testo piè di pagina è. Fine di div, fine del corpo, fine HTML. Allora, qual è il rendering facendo è rendere è una sorta di rattoppare intestazione, un file PHP diverso che conterrà le cose reali che potrai visualizzare, come il vostro tavolo delle scorte se si sta comprando o vendendo azioni. E poi aggiungerà nel piè di pagina. E la vista del modello idea controllore è che vogliono separare come le cose sembrano dal codice. E 'vogliamo separare il frontend e il backend, dove il frontend è le cose che l'utente vede, il bello visuals-- HTML, CSS, cose del genere, immagini, eccetera. E il backend è PHP. Questo è un codice che si scrive. Questo è dove il codice che è fare operazioni reali. Questo è quando si aggiunge un titolo al vostro tavolo, quando si acquista e vendita, che è di backend. E possiamo, come avete visto, tra cui PHP direttamente in HTML. Così che cosa avremmo potuto fare per questo compito è appena avuto un file HTML per ogni pagina, come login. E poi in quella pagina, basta ha avuto un enorme blocco di codice PHP, compreso tutto il codice che quella pagina particolare avrebbe bisogno. E allora potremmo avere fatto per portafoglio. Avremmo potuto fare tutti gli acquisti e la vendita all'interno delle singole pagine. Ma perché siamo di rendering separatamente da dove stiamo scrivendo il backend codice, possiamo facilmente cambiare il modo le cose sembrano senza cambiando ogni singolo file. Noi facciamo le cose come solo aggiungere un nuovo div al fondo di-- Ciao ho modificato il piè di pagina. Si può solo fare cose del genere. Ma anche, si può cambiare l'intero layout visivo senza compromettere ciò che è andando nel backend. Ed è possibile modificare il intero backend e ancora hanno lo sguardo proprio come ha fatto prima. Questo È l'idea di controllore vista del modello. Ed è in realtà un paradigma imposto in alcuni dei linguaggi di programmazione si potrebbe desiderare di utilizzare per progetti finali. Se lo fai sviluppo iOS, essi hanno vista, che è quello che si vede su iPhone, e poi come backend come una cosa separata. Si può pensare un po '. C'è un sacco di file binari a l'informatica, che è divertente, perché tutto è in formato binario. Non ho intenzione che. E 'stato un gioco di parole intenzionale. Sì, gioco di parole non destinato. Ma come i file .h e file .c, c'è un sacco di separazione di cose che potrebbe non essere necessario. Così possiamo semplicemente modificare i file h, o qualcuno può solo vedere un file .h e conoscere esattamente le funzioni che sono nella file .c senza necessariamente conoscere la loro attuazione. Questa idea di componenti separano che dipendono l'uno dall'altro ma può sorta di accedere ad ogni altro attraverso diversi canali, che passa di variabili, basta includere dichiarazioni, le cose così, questo principio contribuisce a creare applicazioni che può essere più facilmente a cura di più persone, può essere più facilmente cambiata o modificato su una grande scala, e sono più facili da eseguire il debug in un sacco di modi. Molto veloce, ho alcuni suggerimenti per pset7, che io farò tutto schermo in modo da non solo guardando the-- punta punta Tippee. Non ci sono molte punte. Ma ho già detto PHP è difficile da mettere a punto. Doppio o triplo controllo esso. Se il codice non è solo mostrando sulla pagina, è probabilmente un errore di PHP, mi dispiace. Non hai mai bisogno di guardare CSS se non si desidera. Ma una volta che hai finito, può essere un bel po 'di divertimento cosa di andare solo a e la mensa con i parametri CSS. CSS e HTML sono un esempio di un modello vista stile controllore cosa troppo, giusto? Si potrebbe avere tag di stile all'interno di elementi HTML. Ma se si ordina di li outsourcing a CSS, sono più facili da modificare e giocare in giro con, e divertirsi con. Trattare CS50 aiutante funziona come scatole nere. Non hai bisogno di sapere esattamente quello che sta facendo render, ma la fiducia per fare sempre la destra cosa a seconda di cosa si passa, cose come questa. E mi sento di raccomandare guardando walkthrough di David, passare attraverso tutti i roba, non solo i todos, ma si può davvero trattare queste scatole nere come. Non andare in questi funzioni in cerca di insetti. E dare il benvenuto al ritorno del nostro signore Zamyla. Grande. Ci sono domande finali prima abbiamo una sorta di rimbalzo per il giorno? Sono ancora vivo? Grande. Persone livestream Ciao. Grande. Non ci sono più domande? No? E poi penso che siamo buona per andare per oggi. Continuerò in giro un po ' poi se la gente avesse domande avevano paura di chiedere sul torrente. Ma per il resto, hanno una buona giornata.