1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [Settimana 8, continua] 2 00:00:02,000 --> 00:00:04,000 [David J. Malan] [Harvard University] 3 00:00:04,000 --> 00:00:08,000 [Questo è CS50.] [CS50.TV] 4 00:00:08,000 --> 00:00:13,000 >> Questo è CS50, quindi questo è il fine della Settimana 8 qui. 5 00:00:13,000 --> 00:00:16,000 Noi, naturalmente, aveva un po 'un uragano all'inizio di questa settimana, 6 00:00:16,000 --> 00:00:19,000 quindi in questo momento è davvero solo io e te in questa aula, 7 00:00:19,000 --> 00:00:22,000 ma oggi continuiamo la nostra conversazione su PHP 8 00:00:22,000 --> 00:00:25,000 e di programmazione web più in generale, e abbiamo anche introdurre l'idea 9 00:00:25,000 --> 00:00:29,000 di basi di dati, in particolare uno chiamato MySQL, che è molto popolare in questi giorni, 10 00:00:29,000 --> 00:00:34,000 in gran parte a causa della sua scalabilità, nonché per il suo essere libero e open source. 11 00:00:34,000 --> 00:00:37,000 >> Ma in primo luogo, uno sguardo a dove avevamo lasciato l'ultima volta. 12 00:00:37,000 --> 00:00:40,000 Ricordiamo che stavamo guardando le diverse Frosh esempi istantanei, 13 00:00:40,000 --> 00:00:44,000 e questa era la forma orrenda che sono arrivato fino a circa 15 anni fa + 14 00:00:44,000 --> 00:00:49,000 in modo che gli studenti sul registro campus per lo sport matricola intramurali 15 00:00:49,000 --> 00:00:52,000 senza avere a trekking più attraverso il cortile di Wigglesworth 16 00:00:52,000 --> 00:00:56,000 far scorrere un pezzo di carta contenuto sotto porta un po 'di sorvegliante. 17 00:00:56,000 --> 00:00:59,000 Invece abbiamo spostato tutto in linea, ma per farlo abbiamo bisogno di fare uso 18 00:00:59,000 --> 00:01:03,000 di alcune tecnologie, così si, avevamo bisogno di HTML, HyperText Markup Language, 19 00:01:03,000 --> 00:01:07,000 che è ancora una volta il linguaggio di markup con cui si fanno le pagine web strutturalmente. 20 00:01:07,000 --> 00:01:10,000 >> Usando un po 'di CSS in questi giorni, fogli di stile CSS, 21 00:01:10,000 --> 00:01:16,000 per cui usiamo stilizzazioni della pagina Web utilizzando una sintassi leggermente diversa, 22 00:01:16,000 --> 00:01:19,000 considerando che l'HTML è stato tutto sulla struttura stessa. 23 00:01:19,000 --> 00:01:21,000 Abbiamo anche bisogno di introdurre un linguaggio di programmazione web. 24 00:01:21,000 --> 00:01:25,000 In questo caso, useremo PHP, e PHP sta per permetterci 25 00:01:25,000 --> 00:01:28,000 al contenuto di uscita in modo dinamico e fare le cose di programmazione come 26 00:01:28,000 --> 00:01:33,000 l'invio di e-mail, come è avvenuto sulla nota abbiamo lasciato la scorsa settimana. 27 00:01:33,000 --> 00:01:35,000 >> Ricordiamo che il codice per questo è in due parti. 28 00:01:35,000 --> 00:01:38,000 Uno, abbiamo avuto froshims3.php, 29 00:01:38,000 --> 00:01:42,000 e questo era in gran parte di markup con un modulo HTML all'interno di esso, 30 00:01:42,000 --> 00:01:45,000 un po 'di CSS qui negli attributi di stile 31 00:01:45,000 --> 00:01:48,000 in modo che il modulo stesso sarà centrato sulla pagina, ma oltre a questo 32 00:01:48,000 --> 00:01:51,000 abbiamo avuto qualche input di form rappresentativi, un campo di testo, una casella di controllo, 33 00:01:51,000 --> 00:01:55,000 alcune radio pulsanti, menù a scelta, e un pulsante submit. 34 00:01:55,000 --> 00:02:01,000 E tramite questo modulo, abbiamo presentato in un file che è stato apparentemente chiamato register3.php, 35 00:02:01,000 --> 00:02:04,000 che a sua volta sembrava un po 'di qualcosa come questo. 36 00:02:04,000 --> 00:02:08,000 Ora, la maggior parte del codice in register3.php, richiamo, è stato tutto di e-mail. 37 00:02:08,000 --> 00:02:11,000 Ha fatto un po 'di validazione della forma che è stata presentata per assicurarsi 38 00:02:11,000 --> 00:02:14,000 che i campi erano in realtà a condizione che ci si aspettava. 39 00:02:14,000 --> 00:02:18,000 Poi abbiamo chiamato alcune funzioni PHP utilizzando un po 'nuova sintassi, 40 00:02:18,000 --> 00:02:20,000 anche se è preso in prestito da C. 41 00:02:20,000 --> 00:02:24,000 >> Questo operatore freccia ci permette di fare uso di qualcosa che si chiama programmazione orientata agli oggetti. 42 00:02:24,000 --> 00:02:27,000 Non andrà in che, in ogni dettaglio in questa sede, ma sappiamo per ora 43 00:02:27,000 --> 00:02:31,000 è un modo di avere le funzioni associate agli oggetti, 44 00:02:31,000 --> 00:02:34,000 che sono un tipo speciale di struttura, come abbiamo visto in C. 45 00:02:34,000 --> 00:02:37,000 Ma per ora, basta prendere sulla fede che questa è la sintassi corretta da utilizzare 46 00:02:37,000 --> 00:02:41,000 quando si utilizza una libreria come questa libreria PHPMailer. 47 00:02:41,000 --> 00:02:44,000 E poi alla fine di questo file abbiamo generato dinamicamente una email 48 00:02:44,000 --> 00:02:47,000 che ha inviato al mio account jharvard@cs50.net 49 00:02:47,000 --> 00:02:50,000 dal mio account jharvard@cs50.net, 50 00:02:50,000 --> 00:02:54,000 e abbiamo informato l'utente di conseguenza che era stato registrato per questo sport. 51 00:02:54,000 --> 00:02:57,000 Questo è più o meno quello che il sito Frosh IM ha fatto tanti anni fa 52 00:02:57,000 --> 00:03:00,000 quando l'ho implementato, ha concesso, in una lingua diversa, 53 00:03:00,000 --> 00:03:02,000 ma vi mostra forse il potere che si ha 54 00:03:02,000 --> 00:03:05,000 ora che ci si può esprimere non solo di programmazione 55 00:03:05,000 --> 00:03:08,000 ad un livello basso in un linguaggio come C, ma ad un livello molto più elevato 56 00:03:08,000 --> 00:03:11,000 con queste applicazioni reali del mondo come e-mail per risolvere effettivamente 57 00:03:11,000 --> 00:03:13,000 alcuni problemi del mondo reale. 58 00:03:13,000 --> 00:03:16,000 >> Ora, naturalmente, anche se io uso questo script per generare un po 'di 59 00:03:16,000 --> 00:03:20,000 messaggi di posta elettronica in modo dinamico da jharvard@cs50.net, che è in effetti un conto 60 00:03:20,000 --> 00:03:23,000 che hanno accesso a, non essere molto attenti a inviare 61 00:03:23,000 --> 00:03:26,000 posta solo da account che sono in realtà il proprio, 62 00:03:26,000 --> 00:03:30,000 perché le cose che si ottiene in un po 'di acqua calda nella vita. 63 00:03:30,000 --> 00:03:35,000 Detto questo, andiamo ora transizione per risolvere un problema del tutto diverso, 64 00:03:35,000 --> 00:03:37,000 che di stati di fissaggio. 65 00:03:37,000 --> 00:03:39,000 Ora, che cosa significa questo in realtà significa? 66 00:03:39,000 --> 00:03:42,000 HTTP, questo Hypertext Transfer Protocol, 67 00:03:42,000 --> 00:03:45,000 è in realtà un protocollo stateless, e che cosa questo significa è che 68 00:03:45,000 --> 00:03:48,000 quando si tira qualcosa come Google.com e poi premere invio 69 00:03:48,000 --> 00:03:51,000 di solito il tuo browser ha un qualche tipo di icona che poi la filatura 70 00:03:51,000 --> 00:03:54,000 traduce in una certa pagina web, in fase di download, 71 00:03:54,000 --> 00:03:57,000 e poi quella piccola icona smette di girare, e che suggerisce in effetti 72 00:03:57,000 --> 00:04:02,000 HTTP che ha portato a termine un qualche tipo di connessione al server e questo è tutto. 73 00:04:02,000 --> 00:04:05,000 HTTP è stateless ', nel senso che non mantiene 74 00:04:05,000 --> 00:04:08,000 una connessione permanente al server Skype stesso modo fa 75 00:04:08,000 --> 00:04:11,000 o Gchat fa perché con HTTP 76 00:04:11,000 --> 00:04:15,000 il presupposto è che una volta che hai recuperato una pagina web che sia. 77 00:04:15,000 --> 00:04:18,000 >> Ora, in realtà, in questi giorni su siti come Facebook e Google Maps 78 00:04:18,000 --> 00:04:21,000 e Twitter e simili c'è dinamismo molto di più in base al quale 79 00:04:21,000 --> 00:04:25,000 anche dopo che l'icona smette di girare si può infatti ottenere ulteriori aggiornamenti 80 00:04:25,000 --> 00:04:29,000 dal server, più tweet, gli aggiornamenti di stato più su Facebook e simili. 81 00:04:29,000 --> 00:04:33,000 Ma anche che utilizza una tecnica che ne parleremo in una settimana o due 82 00:04:33,000 --> 00:04:36,000 conosciuta come Ajax utilizzando un linguaggio chiamato JavaScript, 83 00:04:36,000 --> 00:04:38,000 ma alla fine della giornata, è ancora stateless HTTP. 84 00:04:38,000 --> 00:04:42,000 Eppure, se si vuole ricordare in qualche modo cose su un utente 85 00:04:42,000 --> 00:04:44,000 anche dopo aver scollegato dal server 86 00:04:44,000 --> 00:04:47,000 PHP fa regalare un mezzo di fare questo 87 00:04:47,000 --> 00:04:52,000 perché, come abbiamo visto l'ultima volta, PHP ha una serie di superglobals, 88 00:04:52,000 --> 00:04:55,000 e un superglobale è, di nuovo, una variabile globale speciale 89 00:04:55,000 --> 00:04:59,000 che è consegnato a voi dal server web e in PHP. 90 00:04:59,000 --> 00:05:02,000 >> Non devi fare nulla per mettere i valori in essa, 91 00:05:02,000 --> 00:05:05,000 e tra i superglobals che abbiamo visto finora sono GET e POST, 92 00:05:05,000 --> 00:05:08,000 che è dove i campi modulo vengono messi automaticamente per voi, 93 00:05:08,000 --> 00:05:11,000 così come un paio di altri che non abbiamo ancora visto. 94 00:05:11,000 --> 00:05:17,000 All'interno di $ _SERVER sono alcune variabili speciali previste per il server stesso. 95 00:05:17,000 --> 00:05:22,000 Qual è l'indirizzo IP, quale protocollo, HTTP o HTTPS ha utilizzato, 96 00:05:22,000 --> 00:05:25,000 che metodo hai usato richiesta e simili, quindi c'è un po 'di interessante, 97 00:05:25,000 --> 00:05:29,000 dettagli piccanti sul server, e di fatto, l'utente in là pure. 98 00:05:29,000 --> 00:05:33,000 Ci sono $ _COOKIE, che è dove queste cose cd cookies vengono memorizzati. 99 00:05:33,000 --> 00:05:36,000 Non perdere tempo sui cookie stessi oggi, 100 00:05:36,000 --> 00:05:40,000 ma sappiamo per ora che un cookie è solo un piccolo pezzo di informazioni 101 00:05:40,000 --> 00:05:43,000 che un server web può piantare su un browser web 102 00:05:43,000 --> 00:05:46,000 ed a sua volta delle RAM o disco rigido il suo computer 103 00:05:46,000 --> 00:05:49,000 per memorizzare informazioni su un utente, per esempio, il loro nome utente 104 00:05:49,000 --> 00:05:52,000 in modo da non doverla digitare ogni volta che il login o qualche 105 00:05:52,000 --> 00:05:55,000 numero unico o identificatore per l'utente 106 00:05:55,000 --> 00:05:58,000 in modo che non c'è bisogno di importunare con lo stesso tipo di domande su 107 00:05:58,000 --> 00:06:00,000 Preferenze in futuro, ma la maggior parte di interesse 108 00:06:00,000 --> 00:06:02,000 in questo momento è di $ _SESSION. 109 00:06:02,000 --> 00:06:07,000 >> Questo superglobale, che, come gli altri, è consegnato a voi automaticamente da PHP 110 00:06:07,000 --> 00:06:10,000 quando si sta scrivendo siti Web basati su PHP 111 00:06:10,000 --> 00:06:13,000 in grado di memorizzare tutto quello che vuoi, stringhe, interi, 112 00:06:13,000 --> 00:06:16,000 virgola mobile, valori, array, oggetti, 113 00:06:16,000 --> 00:06:20,000 davvero tutto ciò che si desidera, e permette di memorizzare in modo 114 00:06:20,000 --> 00:06:23,000 che, anche se l'utente che si visita di tanto in tanto 115 00:06:23,000 --> 00:06:26,000 torna un minuto da ora o 5 minuti da ora, perché 116 00:06:26,000 --> 00:06:28,000 prendono il loro tempo prima di cliccare su qualche altro link 117 00:06:28,000 --> 00:06:32,000 PHP farà in modo che tutto ciò che si mette in quella sessione superglobale 118 00:06:32,000 --> 00:06:37,000 minuti o 5 minuti fa, sarà ancora lì quando l'utente ritorna. 119 00:06:37,000 --> 00:06:40,000 E sotto il cofano di questa superglobale è implementata per mezzo di 120 00:06:40,000 --> 00:06:44,000 quelle cose cd cookies, ma per ora, è solo un'astrazione 121 00:06:44,000 --> 00:06:47,000 per cui è una sorta di equivalente programmatico di un carrello della spesa. 122 00:06:47,000 --> 00:06:50,000 Qualunque cosa, il programmatore, messo in quella 123 00:06:50,000 --> 00:06:53,000 superglobale array associativo ci sarà un certo numero di minuti più tardi 124 00:06:53,000 --> 00:06:59,000 finché non viene eliminato o fino a quando l'utente chiude proprio browser del tutto. 125 00:06:59,000 --> 00:07:02,000 >> Diamo un'occhiata a un esempio di come questa cosa viene effettivamente utilizzato. 126 00:07:02,000 --> 00:07:07,000 In counter.php tra i pezzi di oggi di codice 127 00:07:07,000 --> 00:07:09,000 abbiamo la seguente riga. 128 00:07:09,000 --> 00:07:13,000 All'inizio di questo file abbiamo un sacco di commenti blu, che sono poco interessanti, per ora. 129 00:07:13,000 --> 00:07:15,000 Ma in linea 13 si ha una nuova linea, 130 00:07:15,000 --> 00:07:18,000 session_start, e che in realtà è esattamente quello che dice. 131 00:07:18,000 --> 00:07:20,000 Si inizia sessioni. 132 00:07:20,000 --> 00:07:25,000 Vi permette di usare quel grande superglobale $ _SESSION, ed è così semplice come sembra. 133 00:07:25,000 --> 00:07:30,000 Ora, se si procede a guardare la linea 16, cerchiamo di capire che cosa questa pagina web sta per fare. 134 00:07:30,000 --> 00:07:35,000 If (isset ($ _SESSION ["contatore"]), poi andare avanti 135 00:07:35,000 --> 00:07:39,000 e memorizzare nella variabile contatore, contatore minuscolo, 136 00:07:39,000 --> 00:07:42,000 $ _SESSION ["Contatore"]. 137 00:07:42,000 --> 00:07:45,000 Questo sembra essere dichiarazione di una variabile locale chiamata contatore 138 00:07:45,000 --> 00:07:48,000 all'interno del quale è mettendo una copia di ciò che è all'interno del superglobale 139 00:07:48,000 --> 00:07:52,000 chiamato session nella posizione "contro". 140 00:07:52,000 --> 00:07:56,000 Altrimenti, a quanto pare, questo piccolo contatore variabile locale, viene inizializzata a 0. 141 00:07:56,000 --> 00:08:01,000 >> Ma poi poche righe più tardi nel 26 avviso che la copia della sessione del contatore, 142 00:08:01,000 --> 00:08:06,000 la sua chiave, sia assegnato un nuovo valore, che è il suo valore corrente più 1. 143 00:08:06,000 --> 00:08:09,000 In breve, questo file sembra essere l'aggiornamento 144 00:08:09,000 --> 00:08:13,000 un contatore che viene memorizzato all'interno del superglobale sessione 145 00:08:13,000 --> 00:08:16,000 incrementando entro 1, ma conserva una prima copia del valore precedente 146 00:08:16,000 --> 00:08:20,000 memorizzando in una variabile locale chiamata $ contatore, 147 00:08:20,000 --> 00:08:22,000 e poi qui vediamo cosa rimane. 148 00:08:22,000 --> 00:08:24,000 Si scopre che è praticamente solo HTML. 149 00:08:24,000 --> 00:08:29,000 Nella parte inferiore di questa pagina vediamo in linea 37 che ho visitato questo sito 150 00:08:29,000 --> 00:08:33,000 numero del contatore di volte, quindi ci sono un paio di caratteristiche interessanti qui. 151 00:08:33,000 --> 00:08:36,000 Uno, questo è chiaramente una variabile, ma non è sufficiente per mettere solo 152 00:08:36,000 --> 00:08:39,000 $ Contatore nel corpo del codice HTML perché naturalmente 153 00:08:39,000 --> 00:08:43,000 se è solo in mezzo a PHP HTML sta per scontato che è solo HTML. 154 00:08:43,000 --> 00:08:48,000 Si vuole letteralmente $ contatore da stampare sullo schermo. 155 00:08:48,000 --> 00:08:51,000 >> Ma invece di cadere in modalità PHP 156 00:08:51,000 --> 00:08:55,000 con questo pezzo di sintassi si può inserire dinamicamente un valore qui 157 00:08:55,000 --> 00:08:58,000 molto simile nello spirito a quello che abbiamo fatto l'ultima volta con 158 00:08:58,000 --> 00:09:00,000 l'inserimento di valori in stringhe. 159 00:09:00,000 --> 00:09:04,000 In realtà, questa è solo una notazione abbreviata per dire una cosa del genere, letteralmente, 160 00:09:04,000 --> 00:09:12,000 print ($ contatore) o anche qualcosa di simile a printf (% s, contatore), 161 00:09:12,000 --> 00:09:14,000 o addirittura, come si può avere visto on-line o nei libri di testo, 162 00:09:14,000 --> 00:09:17,000 c'è una funzione in PHP chiamato eco 163 00:09:17,000 --> 00:09:20,000 che fa la stessa cosa, e tutti questi sono solo modi più avvolte 164 00:09:20,000 --> 00:09:25,000 di dire 00:09:28,000 In questo caso quello che non c'è bisogno di mettere 166 00:09:28,000 --> 00:09:30,000 il PHP parola dopo il punto di domanda. 167 00:09:30,000 --> 00:09:34,000 Questo è notazione scorciatoia per, ancora una volta, quello che abbiamo appena visto un momento fa 168 00:09:34,000 --> 00:09:37,000 che è eco qualche valore. 169 00:09:37,000 --> 00:09:39,000 >> Vediamo cosa il risultato finale di questo è in realtà. 170 00:09:39,000 --> 00:09:43,000 Lasciatemi passare nel nostro file counter.php, 171 00:09:43,000 --> 00:09:47,000 e vedremo che David appena fatto un errore giocando con il codice lì. 172 00:09:47,000 --> 00:09:50,000 Andiamo fix quello che un casino, 173 00:09:50,000 --> 00:09:54,000 e l'errore sembra essere lì, via, sulla linea 37. 174 00:09:54,000 --> 00:09:59,000 Secondo la parte superiore della pagina che ho visitato questo sito 0 volte. 175 00:09:59,000 --> 00:10:02,000 Bene, andiamo avanti adesso, e nella parte superiore del browser fare clic sul 176 00:10:02,000 --> 00:10:05,000 ricaricare icona, e faccio clic su ricaricare, 177 00:10:05,000 --> 00:10:12,000 e ora ho visitato il sito 1 volta, 2, 3, 4, 5, 6, 7, 8. 178 00:10:12,000 --> 00:10:16,000 E in effetti, se guardiamo il sorgente di questa pagina il codice sorgente attuale sta cambiando, 179 00:10:16,000 --> 00:10:19,000 e notare la completa assenza di qualsiasi PHP, e questo perché 180 00:10:19,000 --> 00:10:23,000 Codice PHP viene valutato o interpretato lato server, 181 00:10:23,000 --> 00:10:27,000 e in modo che significa che l'uscita dello script PHP è ciò che infine inviata al browser, 182 00:10:27,000 --> 00:10:31,000 che in questo caso è un po 'di HTML grezzo e un po' di testo grezzo. 183 00:10:31,000 --> 00:10:33,000 Che cosa sta succedendo qui? 184 00:10:33,000 --> 00:10:37,000 >> Bene, con relativamente poche righe di codice sono in grado di memorizzare 185 00:10:37,000 --> 00:10:40,000 persistente nel corso di diversi secondi, o se aspettato abbastanza, 186 00:10:40,000 --> 00:10:44,000 minuti, anche ore, un valore in un modo che rende HTTP 187 00:10:44,000 --> 00:10:47,000 sembrano stateful come se abbiamo mantenuto 188 00:10:47,000 --> 00:10:51,000 questa connessione al server, ed è anche per ricordare quello che ho detto l'ultima volta, 189 00:10:51,000 --> 00:10:55,000 ma in realtà ci sono un sacco di complessità in corso sotto la cappa 190 00:10:55,000 --> 00:10:59,000 coinvolgendo i cookie che è PHP che permettono di darmi questa illusione 191 00:10:59,000 --> 00:11:02,000 di questo carrello-come funzionalità. 192 00:11:02,000 --> 00:11:05,000 Per ora, un esempio banale in cui siamo solo la memorizzazione di un numero intero, 193 00:11:05,000 --> 00:11:08,000 ma questa funzionalità possa tornare a essere di grande valore 194 00:11:08,000 --> 00:11:10,000 quando si comincia a parlare di progetti più complessi, 195 00:11:10,000 --> 00:11:12,000 tra loro problema posto 7. 196 00:11:12,000 --> 00:11:16,000 Questo è il vostro problema molto ultima volta in CS50. 197 00:11:16,000 --> 00:11:19,000 Lo so, è così triste, ma ciò che troverete è che stiamo andando a concludere 198 00:11:19,000 --> 00:11:22,000 questa parte del semestre da parte effettivamente transizione 199 00:11:22,000 --> 00:11:25,000 dal contesto di C certamente al contesto di PHP 200 00:11:25,000 --> 00:11:27,000 ma durante l'utilizzo di alcuni dei fondamenti stessi 201 00:11:27,000 --> 00:11:29,000 abbiamo parlato per qualche tempo. 202 00:11:29,000 --> 00:11:33,000 >> L'obiettivo con pset 7 è di implementare CS50 Finanza, 203 00:11:33,000 --> 00:11:37,000 che è la propria versione di Yahoo Finance o Google Finance 204 00:11:37,000 --> 00:11:40,000 o anche Etrade.com per cui si ha la possibilità di 205 00:11:40,000 --> 00:11:43,000 guardare in alto i prezzi delle azioni per i simboli di dati, ma anche di più 206 00:11:43,000 --> 00:11:48,000 si ha la possibilità di "comprare" e "vendere" le scorte 207 00:11:48,000 --> 00:11:51,000 che sono negoziati su diverse borse, perché come questa home page 208 00:11:51,000 --> 00:11:55,000 suggerisce qui, che in realtà è la misura in cui abbiamo iniziato 209 00:11:55,000 --> 00:11:59,000 il set problema per voi, avete un form di accesso che sta chiedendo un nome utente e una password. 210 00:11:59,000 --> 00:12:03,000 Ha un pulsante di invio, ma in seguito, come vedremo finalmente vedere, 211 00:12:03,000 --> 00:12:06,000 non c'è nulla di realmente accadendo sotto il cofano ancora perché 212 00:12:06,000 --> 00:12:09,000 resta per voi per implementare la possibilità di registrare nuovi utenti, 213 00:12:09,000 --> 00:12:12,000 la possibilità di acquistare le scorte, di vendere le scorte, 214 00:12:12,000 --> 00:12:14,000 per cercare in realtà i prezzi delle azioni correnti. 215 00:12:14,000 --> 00:12:17,000 >> E infatti, questo sarà come mondo reale possibile perché abbiamo fatto 216 00:12:17,000 --> 00:12:20,000 sono un po 'di codice che vi permetterà con una singola funzione 217 00:12:20,000 --> 00:12:25,000 per interrogare Yahoo Finance, che rende meravigliosamente disponibili i dati sulla 218 00:12:25,000 --> 00:12:31,000 per la ricerca di prezzi delle azioni in base al simbolo di borsa o il simbolo ticker, 219 00:12:31,000 --> 00:12:34,000 e si ottiene indietro il prezzo corrente del titolo del giorno. 220 00:12:34,000 --> 00:12:37,000 I dati in effetti si vede in questo pset particolare sarà 221 00:12:37,000 --> 00:12:40,000 circa come mondo reale come si può ottenere in modo che si sta effettivamente interfacciamento 222 00:12:40,000 --> 00:12:43,000 con le riserve del mondo reale, i prezzi del mondo reale, 223 00:12:43,000 --> 00:12:47,000 e vedremo quanti soldi si può fare, forse 224 00:12:47,000 --> 00:12:51,000 nei giorni successivi di giocare con il vostro set problema proprio. 225 00:12:51,000 --> 00:12:55,000 >> Ma si deve prima preparare il terreno per come progettare qualcosa che è sicuramente più complicato 226 00:12:55,000 --> 00:12:59,000 di counter.php, che è più complicato di tutti gli esempi IM Frosh finora, 227 00:12:59,000 --> 00:13:02,000 e cerchiamo di introdurre un paio di paradigmi qui che ci consentono 228 00:13:02,000 --> 00:13:06,000 sia per pset 7 e forse per il progetto finale se si fa qualcosa basato web 229 00:13:06,000 --> 00:13:11,000 per mantenere il vostro codice ben organizzato, per tenersi sano di mente, 230 00:13:11,000 --> 00:13:15,000 e di fare un passo verso la collaborazione, sia nel progetto finale di CS50 231 00:13:15,000 --> 00:13:18,000 o al di là se si continua a programmare qualcosa in futuro. 232 00:13:18,000 --> 00:13:21,000 C'è questo paradigma di progettazione generale 233 00:13:21,000 --> 00:13:24,000 in informatica e nello sviluppo di software, più in generale 234 00:13:24,000 --> 00:13:27,000 noto come MVC, modello controller della vista, 235 00:13:27,000 --> 00:13:30,000 e questo è un acronimo che descrive sciocco un'idea molto bella, 236 00:13:30,000 --> 00:13:34,000 che è la separazione dei diversi aspetti di un programma, 237 00:13:34,000 --> 00:13:39,000 in particolare mantenendo separata la logica o la logica di business di un sito web 238 00:13:39,000 --> 00:13:42,000 in modo che tutto ciò che comporta cose come 239 00:13:42,000 --> 00:13:45,000 Richiamo di funzioni e interrogazione di banche dati e simili 240 00:13:45,000 --> 00:13:48,000 avviene non tra il codice HTML 241 00:13:48,000 --> 00:13:51,000 ma piuttosto in file separati, e in effetti, c'è questo un file 242 00:13:51,000 --> 00:13:54,000 in genere che hanno chiamato il controllore 243 00:13:54,000 --> 00:13:56,000 questo è davvero la mente dietro l'operazione, e vedremo un esempio 244 00:13:56,000 --> 00:13:58,000 di questo in un momento. 245 00:13:58,000 --> 00:14:01,000 >> C'è un modello che è il codice di programmazione 246 00:14:01,000 --> 00:14:05,000 che fa a parlare ai vostri database, che parla a Yahoo Finance e simili, 247 00:14:05,000 --> 00:14:08,000 e poi c'è la V in MVC, il punto di vista, 248 00:14:08,000 --> 00:14:11,000 tutte le cose che è legato all'estetica, i file che contengono effettivamente 249 00:14:11,000 --> 00:14:14,000 il codice HTML, forse il tuo CSS e simili. 250 00:14:14,000 --> 00:14:17,000 L'idea qui, come suggerisce questa immagine, è che il controllore 251 00:14:17,000 --> 00:14:21,000 è il file, come si vedrà presto e come potrete vedere in particolare pset 7, 252 00:14:21,000 --> 00:14:24,000 che il mondo parla attraverso i loro browser web. 253 00:14:24,000 --> 00:14:27,000 Questo è il file che viene visitato su Internet pubblica, 254 00:14:27,000 --> 00:14:30,000 ma il controller parla potenzialmente di un modello, 255 00:14:30,000 --> 00:14:34,000 che è uno o più altri file che contengono il codice relativo ai dati, 256 00:14:34,000 --> 00:14:37,000 Codice in materia di banche dati e simili, e poi parla 257 00:14:37,000 --> 00:14:40,000 il dispositivo di controllo di uno o più altri file noti come punti di vista, 258 00:14:40,000 --> 00:14:43,000 che sono l'estetica di una pagina web, modelli di sorta, 259 00:14:43,000 --> 00:14:47,000 che potrebbe richiedere alcuni dati come ingresso, ma alla fine della giornata 260 00:14:47,000 --> 00:14:50,000 la logica solo all'interno di una vista dovrebbe essere la resa di tali dati, 261 00:14:50,000 --> 00:14:53,000 l'iterazione di un ciclo ed effettivamente sputando un po 'di 262 00:14:53,000 --> 00:14:56,000 Basato su HTML resa della stessa o anche qualcosa di simile a un PDF. 263 00:14:56,000 --> 00:14:59,000 >> Il bello di MVC è che si può avere diversi punti di vista 264 00:14:59,000 --> 00:15:02,000 sulla base del tipo di dispositivo, in base al tipo di formato di file che effettivamente 265 00:15:02,000 --> 00:15:04,000 desidera mostrare all'utente. 266 00:15:04,000 --> 00:15:10,000 Diamo uno sguardo ad alcuni esempi progressivamente più complessi e ben progettato 267 00:15:10,000 --> 00:15:13,000 partendo prima con la versione 0 qui. 268 00:15:13,000 --> 00:15:16,000 Lasciatemi andare avanti e di aprire nel nostro elenco MVC oggi 269 00:15:16,000 --> 00:15:21,000 un file chiamato index.php nella directory 0. 270 00:15:21,000 --> 00:15:26,000 Si noti che questo è un sito super semplice e molto deludente 271 00:15:26,000 --> 00:15:29,000 che è una sorta di versione 0 di una home page per CS50, 272 00:15:29,000 --> 00:15:32,000 e notare il modo in cui hanno un collegamento a lezioni, abbiamo un link a Syllabus, 273 00:15:32,000 --> 00:15:35,000 e se segui il link con un preavviso di lezioni che l'URL 274 00:15:35,000 --> 00:15:39,000 su cima sta per cambiare per lectures.php. 275 00:15:39,000 --> 00:15:44,000 Se poi segui il link per settimana 1 informa che le modifiche URL per week1.php. 276 00:15:44,000 --> 00:15:46,000 Sembra che ci sia una struttura abbastanza semplice gerarchica qui. 277 00:15:46,000 --> 00:15:49,000 >> Diamo un rapido sguardo sotto il cofano il modo in cui questo è disposto, 278 00:15:49,000 --> 00:15:53,000 e in effetti, se guardo index.php è abbastanza semplice. 279 00:15:53,000 --> 00:15:57,000 In realtà, anche se ho chiamato questo un file PHP non c'è nessun codice di programmazione vero e proprio. 280 00:15:57,000 --> 00:16:01,000 C'è un commento che ho scritto qui in PHP solo modo che l'utente non finisce vederlo. 281 00:16:01,000 --> 00:16:05,000 Naturalmente, come in precedenza, tutto ciò che è in tra i tag PHP 282 00:16:05,000 --> 00:16:08,000 viene interpretato, anche se si tratta di un commento, e per interpretare un commento 283 00:16:08,000 --> 00:16:11,000 significa solo buttare via alla fine della giornata e in realtà non 284 00:16:11,000 --> 00:16:15,000 inviarlo al browser, quindi tutto qui è solo estetica. 285 00:16:15,000 --> 00:16:20,000 Se apro simile lectures.php anche questo è solo un file hardcoded. 286 00:16:20,000 --> 00:16:23,000 Capita di essere chiamati. Php, 287 00:16:23,000 --> 00:16:27,000 ma è davvero solo. html, e week1.php, week2.php 288 00:16:27,000 --> 00:16:31,000 allo stesso modo sono solo markup, quindi c'è un sacco di difetti di questo disegno. 289 00:16:31,000 --> 00:16:33,000 Uno, è una quantità enorme di copia / incolla. 290 00:16:33,000 --> 00:16:37,000 Anche se l'unica cosa che sta cambiando tra questi file è la lista non ordinata, 291 00:16:37,000 --> 00:16:41,000 i tag li, io comunque sono di tipo doc, HTML, testa, 292 00:16:41,000 --> 00:16:44,000 titolo, il corpo chiudere, HTML e altro ancora 293 00:16:44,000 --> 00:16:47,000 in ogni singolo file, il che significa che se mai voluto ristrutturare 294 00:16:47,000 --> 00:16:50,000 questa pagina web o restylize che devo andare e cambiare 295 00:16:50,000 --> 00:16:54,000 tutti questi file manualmente o con un po 'massiccia di ricerca e sostituzione. 296 00:16:54,000 --> 00:17:01,000 >> Facciamo un passo verso un progetto più intelligente, più pensare in versione 1 qui 297 00:17:01,000 --> 00:17:04,000 per cui come da me letto che abbiamo incluso in modo che si può giocare con 298 00:17:04,000 --> 00:17:07,000 questi più tranquilla con preavviso casa che abbiamo qui 299 00:17:07,000 --> 00:17:10,000 un riepilogo dei file nella versione 1 di questo sito, 300 00:17:10,000 --> 00:17:13,000 e sembra che l'ho preso su di me per scomporre 301 00:17:13,000 --> 00:17:17,000 un po 'di codice comune, header.php e footer.php. 302 00:17:17,000 --> 00:17:20,000 Bene, diamo un'occhiata a cosa c'è dentro il primo di questi. 303 00:17:20,000 --> 00:17:23,000 Header.php sembra familiare, 304 00:17:23,000 --> 00:17:26,000 a meno di notare dove viene tagliati fuori? 305 00:17:26,000 --> 00:17:30,000 Subito dopo la linea 19, in modo che tutto ciò che era comune 306 00:17:30,000 --> 00:17:33,000 dal file index.php, lectures.php, 307 00:17:33,000 --> 00:17:36,000 week1 e week2.php dall'esempio precedente. 308 00:17:36,000 --> 00:17:40,000 Quello che ho fatto è stato copia e tutto taglio che era comune a tutti i file, 309 00:17:40,000 --> 00:17:44,000 metterlo in un file di intestazione separata, e similmente nel footer.php 310 00:17:44,000 --> 00:17:48,000 ho applicare lo stesso principio in base al quale le uniche linee interessanti 311 00:17:48,000 --> 00:17:52,000 in footer.php sono questi due, corpo vicino e HTML vicino. 312 00:17:52,000 --> 00:17:55,000 >> Ma ciò che questo significa che è ora nella nuova versione 313 00:17:55,000 --> 00:17:59,000 di preavviso index.php come molto più semplice si può ottenere. 314 00:17:59,000 --> 00:18:02,000 Certo, un po 'più criptica, cercando, un po' meno intuitivo 315 00:18:02,000 --> 00:18:06,000 da seguire verso il basso, ma il mio Dio, tutto che la ridondanza è ormai andato. 316 00:18:06,000 --> 00:18:10,000 Abbiamo bisogno di utilizzare una funzione PHP letteralmente chiamato richiedere fino in alto, 317 00:18:10,000 --> 00:18:15,000 che ricorda molto, ricordo, di C # include il meccanismo. 318 00:18:15,000 --> 00:18:17,000 Abbiamo bisogno di header.php nella parte superiore. 319 00:18:17,000 --> 00:18:20,000 Abbiamo bisogno di footer.php in basso, e l'unica cosa che è diversa 320 00:18:20,000 --> 00:18:25,000 o speciale su questo file è il contenuto che è destinata ad essere unica ad esso. 321 00:18:25,000 --> 00:18:29,000 Se poi vai in, diciamo, lectures.php, lo stesso principio si applica. 322 00:18:29,000 --> 00:18:32,000 Anche in questo caso, alcuni commenti in alto, ma poi ho bisogno di intestazione, piè di pagina richiedono, 323 00:18:32,000 --> 00:18:35,000 e in mezzo è solo il contenuto che è effettivamente cambiato. 324 00:18:35,000 --> 00:18:38,000 E se ci siamo guardati negli Settimana 1 Settimana 2 e ci piacerebbe vedere 325 00:18:38,000 --> 00:18:42,000 che lo stesso principio è stato applicato lì. 326 00:18:42,000 --> 00:18:44,000 Beh, non è ancora finito lì. 327 00:18:44,000 --> 00:18:48,000 >> Diamo uno sguardo alla versione 2, che ha una struttura simile, 328 00:18:48,000 --> 00:18:50,000 a meno di notare ora ho introdotto qualcosa di diverso. 329 00:18:50,000 --> 00:18:53,000 Nella riga 10 ho introdotto helpers.php, 330 00:18:53,000 --> 00:18:55,000 che contiene apparentemente funzioni di supporto. 331 00:18:55,000 --> 00:18:58,000 Una funzione di supporto è generalmente una funzione relativamente breve 332 00:18:58,000 --> 00:19:01,000 che si scrive per aiutarvi in ​​vari luoghi, 333 00:19:01,000 --> 00:19:04,000 e vediamo cosa c'è dentro di helpers.php. 334 00:19:04,000 --> 00:19:07,000 In questo caso, sembra che ha 2 funzioni. 335 00:19:07,000 --> 00:19:10,000 Ricordiamo dal l'altro giorno con il nostro esempio cubo 336 00:19:10,000 --> 00:19:13,000 è possibile definire le proprie funzioni in PHP, e quello che ho fatto ora è che ho 337 00:19:13,000 --> 00:19:17,000 funzioni definite chiamate rendere piè di pagina e rendere intestazione, 338 00:19:17,000 --> 00:19:21,000 il primo dei quali accetta un parametro chiamato dati, 339 00:19:21,000 --> 00:19:25,000 il cui valore predefinito è un array vuoto, come suggerito lì, 340 00:19:25,000 --> 00:19:29,000 e si può effettivamente scrivere questo ancor più brevemente nella sua ultima versione di PHP 341 00:19:29,000 --> 00:19:32,000 dicendo aperta parentesi quadra, chiusa parentesi quadra. 342 00:19:32,000 --> 00:19:35,000 Ciò significa che una matrice vuota di dimensione 0, ma comunque un array. 343 00:19:35,000 --> 00:19:38,000 >> Questa funzione estratto è un po 'speciale in quanto 344 00:19:38,000 --> 00:19:41,000 ciò che fa è che prende come argomento un array associativo 345 00:19:41,000 --> 00:19:45,000 che ha 0 o più coppie di valori chiave, e se si dispone di una chiave di foo 346 00:19:45,000 --> 00:19:48,000 e un valore della barra funzione estratto 347 00:19:48,000 --> 00:19:51,000 crea una situazione in cui ora, come di linea 11, 348 00:19:51,000 --> 00:19:57,000 si dispone di una variabile locale denominata $ pippo il cui valore è il bar. 349 00:19:57,000 --> 00:19:59,000 E se tu avessi più chiavi e valori nella matrice di dati, 350 00:19:59,000 --> 00:20:03,000 allo stesso modo avrebbero dovuto essere estratti in ambito locale 351 00:20:03,000 --> 00:20:06,000 o il nome dello spazio in modo che footer.php e 352 00:20:06,000 --> 00:20:09,000 la stessa idea qui in modo che header.php 353 00:20:09,000 --> 00:20:12,000 hanno accesso a tali variabili. 354 00:20:12,000 --> 00:20:15,000 In effetti, vorrei aprire di nuovo header.php 355 00:20:15,000 --> 00:20:18,000 e attirare l'attenzione ora come si presenta in questa versione. 356 00:20:18,000 --> 00:20:22,000 >> Invece di codificare CS50 come titolo per ogni singola pagina 357 00:20:22,000 --> 00:20:24,000 notare il dinamismo che è possibile ora. 358 00:20:24,000 --> 00:20:29,000 Nella riga 5 Sto facendo eco una variabile titolo, 359 00:20:29,000 --> 00:20:34,000 ma prima sto passando la variabile titolo di una funzione chiamata htmlspecialchars. 360 00:20:34,000 --> 00:20:38,000 Un nome stupido per una funzione, fino a quando lo è, ma lo fa davvero quello che dice. 361 00:20:38,000 --> 00:20:41,000 Si garantisce che tutti i caratteri speciali 362 00:20:41,000 --> 00:20:46,000 nella stringa che è stata approvata nel corretta HTML escape. 363 00:20:46,000 --> 00:20:49,000 Questo è in realtà un modo per evitare qualcosa che si chiama un attacco di cross site scripting 364 00:20:49,000 --> 00:20:52,000 per cui qualcuno può maliziosamente o accidentalmente 365 00:20:52,000 --> 00:20:55,000 iniettare il codice HTML nel tuo sito web 366 00:20:55,000 --> 00:20:59,000 incollando in qualche forma, per esempio, 367 00:20:59,000 --> 00:21:02,000 qualcosa che non si erano abbastanza aspettavamo, in particolare il codice JavaScript, 368 00:21:02,000 --> 00:21:05,000 come ne parleremo in una o due settimane di tempo. 369 00:21:05,000 --> 00:21:08,000 >> Questo header.php ora, è una vista 370 00:21:08,000 --> 00:21:12,000 nel senso che permette di visualizzare il contenuto estetico di alcuni set di dati. 371 00:21:12,000 --> 00:21:14,000 Ma più specificamente, è un modello. 372 00:21:14,000 --> 00:21:19,000 Questa è una sorta di progetto ormai di ciò che vogliamo l'intestazione di ogni pagina a guardare come, 373 00:21:19,000 --> 00:21:23,000 ma c'è un po 'di dinamismo in quanto vogliamo che il titolo da inserire in modo dinamico 374 00:21:23,000 --> 00:21:26,000 basato sulla variabile titolo 375 00:21:26,000 --> 00:21:30,000 che è stato estratto quando abbiamo chiamato, ancora una volta, 376 00:21:30,000 --> 00:21:33,000 il rendering funzione intestazione. 377 00:21:33,000 --> 00:21:36,000 Ora, se abbiamo guardato piè render, c'è in realtà non serve a molto di che in questo momento 378 00:21:36,000 --> 00:21:40,000 perché in footer.php non c'è dinamismo di sorta. 379 00:21:40,000 --> 00:21:43,000 Ci potrebbe essere, ma al momento si tratta di un elenco hardcoded di 2 tag, 380 00:21:43,000 --> 00:21:46,000 ma l'idea stesso vale, in modo che suggerisce realtà perché 381 00:21:46,000 --> 00:21:49,000 abbiamo fatto perdere tempo con un colpo di testa di rendering e una funzione di rendering piè di pagina? 382 00:21:49,000 --> 00:21:52,000 Lasciami andare, invece ora in versione 3, 383 00:21:52,000 --> 00:21:56,000 e nella versione 3 in aiutanti ho deciso di semplificare ancora di più. 384 00:21:56,000 --> 00:21:58,000 >> Vorrei avere una funzione di rendering. 385 00:21:58,000 --> 00:22:02,000 Fammi prendere un altro argomento, questa volta chiamato modello, 386 00:22:02,000 --> 00:22:05,000 che è destinato ad essere il nome di un modello, 387 00:22:05,000 --> 00:22:11,000 e poi io concatenare presuntuosamente. php per valore variabile, 388 00:22:11,000 --> 00:22:17,000 e poi se esiste foo.php, bar.php o header.php e footer.php, 389 00:22:17,000 --> 00:22:20,000 allora ho intenzione di andare avanti ed estrarre i dati variabili 390 00:22:20,000 --> 00:22:23,000 e quindi richiedono quel percorso. 391 00:22:23,000 --> 00:22:29,000 In altre parole, per usare questo ora, se apro index.php 392 00:22:29,000 --> 00:22:32,000 notare che io non chiamo colpo di testa di rendering più. 393 00:22:32,000 --> 00:22:36,000 Mi basta chiamare il rendering, ma passare un valore quotato di intestazione 394 00:22:36,000 --> 00:22:39,000 per chiarire che modello ho effettivamente desidera caricare. 395 00:22:39,000 --> 00:22:41,000 >> Poi qui notare quello che sto facendo. 396 00:22:41,000 --> 00:22:44,000 Sto passando dinamicamente una chiave del titolo, 397 00:22:44,000 --> 00:22:47,000 un valore di CS50, e anche questo, come abbiamo visto prima, 398 00:22:47,000 --> 00:22:51,000 potrebbe essere reso più sintetica nella sua ultima versione di PHP 399 00:22:51,000 --> 00:22:54,000 dove posso sostituire la funzione di matrice con parentesi quadre, 400 00:22:54,000 --> 00:22:57,000 che propongo è ancora più leggibile e certamente 401 00:22:57,000 --> 00:22:59,000 un po 'più facile da digitare. 402 00:22:59,000 --> 00:23:02,000 E, naturalmente, con la chiamata di rendering piè di pagina nella parte inferiore, 403 00:23:02,000 --> 00:23:05,000 non ci preoccupiamo passando un secondo argomento a tutti, senza array associativo, 404 00:23:05,000 --> 00:23:07,000 perché non c'è niente dentro dinamica del piè di pagina. 405 00:23:07,000 --> 00:23:10,000 Sono solo alcuni tag di chiusura per l'HTML. 406 00:23:10,000 --> 00:23:14,000 Bene, ci stiamo prendendo misure necessarie per la pulizia veramente le cose qui, 407 00:23:14,000 --> 00:23:17,000 ma permettetemi di aprire 2 esempi finali. 408 00:23:17,000 --> 00:23:21,000 Questo, il numero 4, si noti che ho fatto una scelta ponderata ora 409 00:23:21,000 --> 00:23:26,000 di migliorare l'esempio precedente e, infine, con un po 'di gerarchia per i miei file. 410 00:23:26,000 --> 00:23:29,000 >> Si noti che in questa sintesi, in questo mi leggi, ho introdotto 411 00:23:29,000 --> 00:23:32,000 comprende una directory e una directory dei modelli 412 00:23:32,000 --> 00:23:35,000 i cui contenuti saranno le cose che desidera includere 413 00:23:35,000 --> 00:23:38,000 ed i modelli che voglio rendere, rispettivamente. 414 00:23:38,000 --> 00:23:42,000 Questo è veramente me essendo anale e cercando di mantenere le cose in ordine, 415 00:23:42,000 --> 00:23:45,000 mantenere i file correlati, ma il risultato finale 416 00:23:45,000 --> 00:23:48,000 è che ora abbiamo una configurazione un po 'più ordinato, ma dobbiamo ricordare oggi 417 00:23:48,000 --> 00:23:51,000 in, per esempio, index.php 418 00:23:51,000 --> 00:23:55,000 quando si richiede il file di helpers.php 419 00:23:55,000 --> 00:24:01,000 dobbiamo ora lo richiedono tramite includes / helpers.php 420 00:24:01,000 --> 00:24:06,000 piuttosto che solo dicendo helpers.php perché ora è in realtà in una sottodirectory. 421 00:24:06,000 --> 00:24:09,000 Ora, per inciso, si vedrà in questi esempi e alcuni altri 422 00:24:09,000 --> 00:24:11,000 funzioni come richiedono, richiedono una volta. 423 00:24:11,000 --> 00:24:15,000 C'è in realtà una funzione si chiamava includono, e tutti hanno un comportamento leggermente diverso. 424 00:24:15,000 --> 00:24:18,000 Qui lo dico una volta bisogno di fare super chiaro che io voglio solo quelle 425 00:24:18,000 --> 00:24:20,000 aiutanti incluso nel mio progetto una volta. 426 00:24:20,000 --> 00:24:24,000 Ma se io sono attento e se sto davvero pensando con la mia logica propriamente 427 00:24:24,000 --> 00:24:27,000 dovrebbe essere sufficiente anche solo per dire richiedere fino all'inizio 428 00:24:27,000 --> 00:24:31,000 finché io stesso non accidentalmente richiedono lo stesso file altrove. 429 00:24:31,000 --> 00:24:34,000 In realtà, questo è un modo leggermente più efficiente di fare quindi utilizzando 430 00:24:34,000 --> 00:24:38,000 richiedono una volta, quindi io lo rintuzzare richiedere solo. 431 00:24:38,000 --> 00:24:40,000 >> Facciamo un passo avanti. 432 00:24:40,000 --> 00:24:46,000 Questo ultimo esempio ora, versione 5, ha una gerarchia di cartelle ancora più pulito. 433 00:24:46,000 --> 00:24:50,000 Notate quello che ho fatto qui per il read me in questa versione finale 434 00:24:50,000 --> 00:24:54,000 ora ho la mia directory HTML, che ho avuto tutto questo tempo, 435 00:24:54,000 --> 00:24:58,000 ma dentro di ora c'è solo index.php, lectures.php, 436 00:24:58,000 --> 00:25:01,000 week1.php e week2.php. 437 00:25:01,000 --> 00:25:05,000 L'elenco include ora vive a fianco della directory HTML, 438 00:25:05,000 --> 00:25:08,000 così allo stesso livello di pari livello, per così dire. 439 00:25:08,000 --> 00:25:10,000 Così fa la cartella dei modelli. 440 00:25:10,000 --> 00:25:14,000 L'asporto chiave qui è che ho introdotto la struttura un po 'di più, 441 00:25:14,000 --> 00:25:17,000 ma la caratteristica fondamentale è che ora solo i file 442 00:25:17,000 --> 00:25:21,000 che devono essere accessibile dal web, accessibile pubblicamente 443 00:25:21,000 --> 00:25:25,000 da un URL su Internet pubblico sono nella mia directory HTML. 444 00:25:25,000 --> 00:25:28,000 >> File Nel frattempo, gli altri, helpers.php, footer.php, 445 00:25:28,000 --> 00:25:32,000 header.php, che sono senza dubbio forse più sensibili, 446 00:25:32,000 --> 00:25:35,000 forse aiutanti in realtà ha alcuni nomi utente e le password o qualche intellettuale 447 00:25:35,000 --> 00:25:39,000 di proprietà di mio, funziona davvero non voglio che il mondo a vedere, anche se accidentalmente. 448 00:25:39,000 --> 00:25:45,000 E 'buona norma tenere fuori dalla directory pubblica HTML 449 00:25:45,000 --> 00:25:48,000 tutti i file che non si devono essere pubbliche. 450 00:25:48,000 --> 00:25:51,000 Tutto quello che dovete fare in questo caso quando si guarda, per esempio, 451 00:25:51,000 --> 00:25:55,000 file index.php nella directory HTML, 452 00:25:55,000 --> 00:25:58,000 notare dobbiamo solo essere un po 'più attenti quando è richiesta 453 00:25:58,000 --> 00:26:00,000 o richiedere una volta questo file. 454 00:26:00,000 --> 00:26:03,000 Ho bisogno di fare prima .. per passare alla directory superiore, 455 00:26:03,000 --> 00:26:06,000 poi fare / includes / helpers.php 456 00:26:06,000 --> 00:26:12,000 tuffarsi indietro per ottenere il file che mi interessa. 457 00:26:12,000 --> 00:26:16,000 >> Tutte le domande poi su MVC 458 00:26:16,000 --> 00:26:20,000 o questa incarnazione relativamente semplice della stessa? 459 00:26:20,000 --> 00:26:23,000 E vorrei mettere in chiaro che ci siamo concentrati un po 'sul 460 00:26:23,000 --> 00:26:27,000 V qui, il punto di vista e il factoring fuori di questi modelli. 461 00:26:27,000 --> 00:26:30,000 Non hai veramente distinto da C M ancora. 462 00:26:30,000 --> 00:26:33,000 In realtà, non c'è davvero nessun M qui, e anche il nostro C, 463 00:26:33,000 --> 00:26:36,000 controller, non è realmente facendo più di tanto, ma si otterrà molto di più 464 00:26:36,000 --> 00:26:39,000 familiarità con entrambe le 2 lettere da MVC, 465 00:26:39,000 --> 00:26:43,000 o meglio, si otterrà molto di più familiarità con il C 466 00:26:43,000 --> 00:26:49,000 in MVC per il set problema 7, quindi non c'è più di quel all'orizzonte. 467 00:26:49,000 --> 00:26:51,000 Domande? 468 00:26:51,000 --> 00:26:53,000 In realtà c'è nessuno qui. 469 00:26:53,000 --> 00:26:57,000 >> Okay, ora passare al secondo argomento e ultima per oggi. 470 00:26:57,000 --> 00:27:00,000 Che è l'introduzione di un database. 471 00:27:00,000 --> 00:27:03,000 Fino a questo punto abbiamo avuto alcuni modi di memorizzazione dei dati. 472 00:27:03,000 --> 00:27:05,000 Abbiamo usato le variabili. 473 00:27:05,000 --> 00:27:08,000 Nel nostro file C, I / O di discussione abbiamo iniziato ad usare i file di testo 474 00:27:08,000 --> 00:27:11,000 e uso dei file come fprintf, e poi abbiamo anche iniziato 475 00:27:11,000 --> 00:27:14,000 parlando di file CSV un po ', Comma Separated Values, 476 00:27:14,000 --> 00:27:17,000 così tutti questi ci ha permesso di avere dati memorizzati 477 00:27:17,000 --> 00:27:19,000 o non-persistente o persistente. 478 00:27:19,000 --> 00:27:23,000 Ma anche CSV non sono veramente favorevoli alla ricerca 479 00:27:23,000 --> 00:27:25,000 e l'inserimento e l'eliminazione. 480 00:27:25,000 --> 00:27:28,000 E 'davvero solo un file di testo stupido separati da virgole 481 00:27:28,000 --> 00:27:30,000 riga per riga per riga per riga, quindi se si desidera 482 00:27:30,000 --> 00:27:32,000 cercare quel file il meglio che puoi fare è davvero ricerca lineare. 483 00:27:32,000 --> 00:27:34,000 Devi iniziare nella parte superiore del file, leggere il tutto in, 484 00:27:34,000 --> 00:27:36,000 e cercare un valore di interesse. 485 00:27:36,000 --> 00:27:39,000 Se si desidera inserire in esso si deve fare la stessa cosa, 486 00:27:39,000 --> 00:27:41,000 iterando su di esso e l'inserimento in un luogo particolare, 487 00:27:41,000 --> 00:27:45,000 e in effetti, quello che devi fare tutta la logica di ricerca di se stessi. 488 00:27:45,000 --> 00:27:49,000 >> Non si può fare modello intelligente di corrispondenza in un file CSV a meno che non ci si scrive il codice. 489 00:27:49,000 --> 00:27:51,000 Non si può fare di filtrazione di un file CSV 490 00:27:51,000 --> 00:27:53,000 a meno che non ci si scrive il codice. 491 00:27:53,000 --> 00:27:56,000 Non sarebbe bello se qualcun altro messo in tutti gli sforzi 492 00:27:56,000 --> 00:27:59,000 per rendere effettivamente la ricerca semplice e facile inserimento 493 00:27:59,000 --> 00:28:01,000 e cancellazione e l'aggiornamento e così via? 494 00:28:01,000 --> 00:28:04,000 Questo è esattamente cosa è un database. 495 00:28:04,000 --> 00:28:07,000 SQL, Structured Query Language, è un altro linguaggio 496 00:28:07,000 --> 00:28:10,000 che stiamo introducendo oggi, ma anche questo è abbastanza accessibile, 497 00:28:10,000 --> 00:28:13,000 e ciò che siamo davvero intenzione di fare è solo strappare fuori di esso alcuni dei più salienti 498 00:28:13,000 --> 00:28:16,000 caratteristiche in modo che per pset 7, e se si fa qualcosa di web basata, 499 00:28:16,000 --> 00:28:19,000 il progetto finale, si ha la possibilità di esprimere se stessi 500 00:28:19,000 --> 00:28:22,000 in termini di query di dati. 501 00:28:22,000 --> 00:28:25,000 Hai la possibilità di memorizzare un po 'o un sacco di dati 502 00:28:25,000 --> 00:28:28,000 in modo molto più strutturato che alla fine della giornata 503 00:28:28,000 --> 00:28:32,000 rendere la vita più facile, perché con SQL puoi esprimerti 504 00:28:32,000 --> 00:28:35,000 più precisamente, molto più metodo per 505 00:28:35,000 --> 00:28:40,000 recuperare un sottoinsieme di dati da un corpus più ampio di dati. 506 00:28:40,000 --> 00:28:45,000 >> Si può pensare a una base di dati, in questo caso, un database SQL, o comunque in Excel 507 00:28:45,000 --> 00:28:48,000 o numeri in cui si tratta di un foglio di calcolo, 508 00:28:48,000 --> 00:28:50,000 o forse più fogli di calcolo, e un foglio di calcolo, naturalmente, 509 00:28:50,000 --> 00:28:53,000 ha righe e colonne, e questo perché 510 00:28:53,000 --> 00:28:56,000 Database SQL sono relazionali, relazionale nel senso 511 00:28:56,000 --> 00:28:59,000 che possono archiviare dati in termini di queste tabelle, 512 00:28:59,000 --> 00:29:01,000 righe e colonne. 513 00:29:01,000 --> 00:29:03,000 Sono più performante di qualcosa di simile a un foglio di calcolo, 514 00:29:03,000 --> 00:29:05,000 e un foglio è destinato ad essere utilizzato da un essere umano. 515 00:29:05,000 --> 00:29:08,000 Un database è destinata ad essere utilizzata da un programmatore 516 00:29:08,000 --> 00:29:12,000 la scrittura di codice contro di essa, così l'incarnazione di una banca dati 517 00:29:12,000 --> 00:29:14,000 sta per essere o riga di comando. 518 00:29:14,000 --> 00:29:18,000 >> Una delle basi di dati relazionali più popolari là fuori è, ancora una volta, MySQL, 519 00:29:18,000 --> 00:29:22,000 che è meravigliosamente libero, prestazioni molto elevate, e questo è ciò che 520 00:29:22,000 --> 00:29:24,000 Facebook utilizzato molto presto e in parte ancora oggi 521 00:29:24,000 --> 00:29:27,000 per memorizzare un sacco di suoi dati, e vedremo tra poco 522 00:29:27,000 --> 00:29:30,000 che utilizzando i comandi relativamente semplici 523 00:29:30,000 --> 00:29:33,000 siamo in grado di selezionare i dati, dati inserire, aggiornare dati, 524 00:29:33,000 --> 00:29:37,000 cancellare i dati e simili, ma per fortuna, non c'è più una interfaccia user-friendly 525 00:29:37,000 --> 00:29:39,000 che solo digitando al prompt in bianco e nero qui. 526 00:29:39,000 --> 00:29:43,000 Useremo per pset 7 e al di là di uno strumento gratuito chiamato phpMyAdmin. 527 00:29:43,000 --> 00:29:45,000 Il nome è casuale. 528 00:29:45,000 --> 00:29:47,000 Lo strumento sembra essere implementato in PHP, 529 00:29:47,000 --> 00:29:49,000 ma questo è fondamentalmente irrilevante. 530 00:29:49,000 --> 00:29:53,000 Cosa c'è di utile su phpMyAdmin è che è un web-based utility. 531 00:29:53,000 --> 00:29:55,000 L'abbiamo pre-installato nella macchina per voi, 532 00:29:55,000 --> 00:29:58,000 e con esso è possibile creare tabelle in un database, 533 00:29:58,000 --> 00:30:01,000 è possibile inserire i dati, cancellare dati, e in generale vedere 534 00:30:01,000 --> 00:30:04,000 i dati in un abbastanza ambiente user-friendly. 535 00:30:04,000 --> 00:30:07,000 Gli utenti non si intende utilizzare phpMyAdmin. 536 00:30:07,000 --> 00:30:09,000 >> Questo è in realtà solo uno strumento di amministrazione o di sviluppatore 537 00:30:09,000 --> 00:30:12,000 con cui vedere e curiosare i dati e capire come strutturarlo, 538 00:30:12,000 --> 00:30:15,000 proprio come ci si potrebbe utilizzare Excel o Numbers, 539 00:30:15,000 --> 00:30:19,000 ma sarà un ottimo modo di visualizzare ciò che accade sotto il cofano 540 00:30:19,000 --> 00:30:22,000 in modo che è possibile concentrarsi sul problema interessante solving e non tanto 541 00:30:22,000 --> 00:30:25,000 sui comandi arcani. 542 00:30:25,000 --> 00:30:28,000 Diamo un'occhiata a un esempio di dati che possono essere memorizzati tabularly 543 00:30:28,000 --> 00:30:30,000 in un database relazionale. 544 00:30:30,000 --> 00:30:32,000 Ecco un esempio. 545 00:30:32,000 --> 00:30:35,000 Ora, purtroppo, phpMyAdmin commesso un errore sul lato della strada gettare troppe parole 546 00:30:35,000 --> 00:30:38,000 e la grafica su di te, ma se affinare in proprio sulla 547 00:30:38,000 --> 00:30:42,000 ID di colonna, la colonna nome utente e la colonna di hash, 548 00:30:42,000 --> 00:30:45,000 questo è effettivamente un foglio di calcolo, ma capita di essere un frammento 549 00:30:45,000 --> 00:30:49,000 di un tavolo all'interno dell'apparecchio 550 00:30:49,000 --> 00:30:53,000 utilizzando un file che mettiamo a vostra disposizione nel set problema 7. 551 00:30:53,000 --> 00:30:57,000 >> In particolare, vi diamo un file che rappresenta 552 00:30:57,000 --> 00:31:01,000 di un utente tavolo, quindi un foglio di lavoro contenente gli utenti con 3 colonne, 553 00:31:01,000 --> 00:31:05,000 uno dei quali è un ID univoco a partire da 1 e viene incrementato successivamente. 554 00:31:05,000 --> 00:31:08,000 La seconda colonna è un nome utente, e quelli di voi che ha fatto Hacker, 555 00:31:08,000 --> 00:31:12,000 l'edizione di Hacker pset 2, potrebbe riconoscere alcuni di questi nomi utente almeno. 556 00:31:12,000 --> 00:31:16,000 Sul lato destro sono le password, ma non sono le password letterali. 557 00:31:16,000 --> 00:31:19,000 Sono hash dello stesso, così si scopre 558 00:31:19,000 --> 00:31:22,000 che memorizzare le password in un database è una pessima idea. 559 00:31:22,000 --> 00:31:25,000 Avete probabilmente letto tutto ad un certo punto di qualche sito 560 00:31:25,000 --> 00:31:28,000 o database di una compagnia di compromessi, e poi si deve 561 00:31:28,000 --> 00:31:31,000 cambiare la password, è necessario per ottenere rimborsi sulle cose 562 00:31:31,000 --> 00:31:34,000 perché un tizio male in realtà ha rotto nel vostro conto in seguito. 563 00:31:34,000 --> 00:31:38,000 >> Memorizzare le password in chiaro, non crittografato in un database 564 00:31:38,000 --> 00:31:41,000 è completamente stupido, ma è molto divertente 565 00:31:41,000 --> 00:31:44,000 poi leggere di alcune aziende molto note 566 00:31:44,000 --> 00:31:47,000 a volte nella stampa le cui banche dati sono compromessi, 567 00:31:47,000 --> 00:31:50,000 e quella parte non è divertente, ma il fatto che le banche dati contengono in chiaro 568 00:31:50,000 --> 00:31:53,000 password è ridicolo perché letteralmente con una riga di codice 569 00:31:53,000 --> 00:31:57,000 è possibile proteggere contro tale minaccia particolare, e questo è quello che abbiamo fatto qui. 570 00:31:57,000 --> 00:32:00,000 Anche per il nostro piccolo falso CS50 versione Finanza 571 00:32:00,000 --> 00:32:03,000 stiamo crittografia password per buona misura, e il fatto che 572 00:32:03,000 --> 00:32:07,000 tutte queste password inizia con $ 1 $ è solo una convenzione. 573 00:32:07,000 --> 00:32:10,000 Questo significa solo che sono criptati o realmente hash, 574 00:32:10,000 --> 00:32:13,000 che è come un senso unico funzione di crittografia 575 00:32:13,000 --> 00:32:17,000 per cui non è possibile invertire i suoi effetti con una cosa chiamata MD5. 576 00:32:17,000 --> 00:32:21,000 >> Il fatto che 50 è dopo che significa che un valore salt 577 00:32:21,000 --> 00:32:24,000 di 50 è stato usato per l'hashing tutte queste password tranne una. 578 00:32:24,000 --> 00:32:27,000 Il mio, naturalmente, come si può vedere qui, HA, 579 00:32:27,000 --> 00:32:30,000 stava usando un sale diverso, quindi quelli di voi che si sono un po 'lo sgambetto 580 00:32:30,000 --> 00:32:33,000 forse in Hacker 2, che avrebbe potuto essere il risultato del nostro aver usato 581 00:32:33,000 --> 00:32:36,000 un hash diverso dagli altri perché la mia password è in realtà la stessa 582 00:32:36,000 --> 00:32:38,000 come un altro utente lassù. 583 00:32:38,000 --> 00:32:41,000 In effetti, se stavate aspettando tutte queste settimane per scoprire 584 00:32:41,000 --> 00:32:44,000 ciò che le password sono state qui erano le password che sono state contestate si 585 00:32:44,000 --> 00:32:48,000 per rompere nell'edizione Hacker del set problema 2, in modo non troppo difficile. 586 00:32:48,000 --> 00:32:50,000 Infatti, Malan era lo stesso jharvard, 587 00:32:50,000 --> 00:32:54,000 ma se andiamo indietro sembravano diverse. 588 00:32:54,000 --> 00:32:58,000 >> Focus su jharvard in cremisi perché erano salati in modo diverso. 589 00:32:58,000 --> 00:33:01,000 L'algoritmo è stato perturbato in modo che la 590 00:33:01,000 --> 00:33:05,000 valore hash, il valore crittografato sembra un po 'diverso 591 00:33:05,000 --> 00:33:08,000 perché gli ingressi sono stati leggermente diversi, ma la password sotto la cappa 592 00:33:08,000 --> 00:33:10,000 era ancora in ultima analisi, cremisi. 593 00:33:10,000 --> 00:33:12,000 Ora, chi se ne frega di questo? 594 00:33:12,000 --> 00:33:15,000 Bene, vi stiamo fornendo con gli utenti di esempio, i nomi dei campioni utente 595 00:33:15,000 --> 00:33:18,000 e gli hash delle loro password, in modo che in realtà un po ' 596 00:33:18,000 --> 00:33:23,000 clienti per CS50 Finanza la prima volta scendere a terra con il codice. 597 00:33:23,000 --> 00:33:27,000 Dovrete implementare più tavoli all'interno di MySQL, all'interno del database. 598 00:33:27,000 --> 00:33:30,000 Dovrete creare più fogli di calcolo, in modo efficace, ma abbiamo deciso di darvi questo 599 00:33:30,000 --> 00:33:33,000 per iniziare, e vedrete che il problema disciplinare set 600 00:33:33,000 --> 00:33:37,000 ti guida attraverso il processo di importazione di questa tabella 601 00:33:37,000 --> 00:33:39,000 e anche spiegare ciò che alcune delle caratteristiche sono, 602 00:33:39,000 --> 00:33:41,000 e potrai anche vedere che vi mettiamo a disposizione il codice 603 00:33:41,000 --> 00:33:44,000 per gestire l'hashing o la crittografia di queste password, 604 00:33:44,000 --> 00:33:49,000 quindi non c'è bisogno di preoccuparsi troppo di quello che MD5 o simili è in realtà tutto. 605 00:33:49,000 --> 00:33:53,000 >> Quindi, SQL, Structured Query Language. 606 00:33:53,000 --> 00:33:56,000 Questo è, molto semplicemente, la lingua che sta per iniziare a utilizzare in pset 7 607 00:33:56,000 --> 00:34:01,000 e, forse, oltre a richiedere i dati da alcuni database. 608 00:34:01,000 --> 00:34:06,000 I dati sono, ancora una volta, memorizzato tabularly in queste tabelle relazionali, colonne e righe, 609 00:34:06,000 --> 00:34:09,000 ma con un po 'di sintassi relativamente semplice come eliminazione, 610 00:34:09,000 --> 00:34:12,000 inserire, aggiornare e selezionare possiamo fare esattamente questo. 611 00:34:12,000 --> 00:34:15,000 Siamo in grado di eliminare dal database, inserire, 612 00:34:15,000 --> 00:34:19,000 aggiornare i dati, così come selezionare, cioè, recuperare i dati dal database. 613 00:34:19,000 --> 00:34:21,000 Come possiamo fare per fare questo? 614 00:34:21,000 --> 00:34:23,000 Lasciami andare avanti all'interno dell'apparecchio. 615 00:34:23,000 --> 00:34:28,000 Vorrei tirare su http://localhost, 616 00:34:28,000 --> 00:34:30,000 che, di nuovo, è l'apparecchio stesso locale. 617 00:34:30,000 --> 00:34:32,000 Questo è il suo soprannome predefinito. 618 00:34:32,000 --> 00:34:35,000 E lasciami andare / phpmyadmin. 619 00:34:35,000 --> 00:34:39,000 Questo sembra essere un URL speciale che l 'apparecchio è preconfigurato per capire 620 00:34:39,000 --> 00:34:42,000 che richiede subito per me un nome utente e una password. 621 00:34:42,000 --> 00:34:46,000 >> Come al solito, ho intenzione di scrivere jharvard e cremisi, 622 00:34:46,000 --> 00:34:48,000 ma si rendono conto che è l'account di amministratore del computer. 623 00:34:48,000 --> 00:34:53,000 E 'solo una coincidenza che c'è anche una jharvard registrato per CS50 Finanza. 624 00:34:53,000 --> 00:34:56,000 Jharvard, cremisi, enter mi dà l'interfaccia utente che abbiamo visto 625 00:34:56,000 --> 00:34:59,000 un assaggio di un momento fa, ed è un po 'opprimente in un primo momento, 626 00:34:59,000 --> 00:35:02,000 ma vi assicuro, non si è mai costretta a fare clic su la maggior parte dei link in questo strumento. 627 00:35:02,000 --> 00:35:05,000 Vi ritroverete con un piccolo sottoinsieme che sono super disponibile, 628 00:35:05,000 --> 00:35:08,000 il primo dei quali è qui database. 629 00:35:08,000 --> 00:35:11,000 Se vado con le banche dati, si noti che sto viene richiesto di creare un database. 630 00:35:11,000 --> 00:35:14,000 Questo è come la creazione di un nuovo file di Excel, in modo efficace. 631 00:35:14,000 --> 00:35:18,000 Ho intenzione di andare avanti e chiamare questa conferenza, e sto solo andando a ignorare il campo lì, regole di confronto. 632 00:35:18,000 --> 00:35:20,000 Ha a che fare con la rappresentazione dei dati in esso, 633 00:35:20,000 --> 00:35:24,000 e ho intenzione di fare clic su creare, e ora notare come ho lasciato andare di creare 634 00:35:24,000 --> 00:35:27,000 sulla sinistra dove dice nessun database 635 00:35:27,000 --> 00:35:30,000 Mi dovrebbe presto vedere il database lezione. 636 00:35:30,000 --> 00:35:32,000 >> Se ora cliccate sulla sinistra, il database di lezione, 637 00:35:32,000 --> 00:35:34,000 notare le mie schede cambiare un po '. 638 00:35:34,000 --> 00:35:38,000 Ho struttura, SQL, l'esportazione, l'importazione e alcune altre cose. 639 00:35:38,000 --> 00:35:40,000 La struttura è praticamente vuoto. 640 00:35:40,000 --> 00:35:43,000 Non ci sono tabelle nel database trovato, come si dice qui, 641 00:35:43,000 --> 00:35:47,000 quindi cerchiamo di creare una tabella, e andiamo avanti e creare una tabella 642 00:35:47,000 --> 00:35:53,000 come studenti, e quante colonne vogliamo? 643 00:35:53,000 --> 00:35:55,000 Record di Teniamoci questo semplice, e sia per tutti gli studenti 644 00:35:55,000 --> 00:35:58,000 un numero di identificazione, un nome e un indirizzo email. 645 00:35:58,000 --> 00:36:02,000 >> Terremo è semplice come quella, così 3 colonne, andare. 646 00:36:02,000 --> 00:36:05,000 Il modulo che vedete qui ora è un po 'disordinato e travolgente, 647 00:36:05,000 --> 00:36:08,000 ma non ci resta che passare attraverso di essa riga per riga, in modo molto velocemente diamo 648 00:36:08,000 --> 00:36:14,000 la prima colonna in questo database il nome di ID per l'identificatore univoco. 649 00:36:14,000 --> 00:36:17,000 Sarà un numero intero. Posso realmente ignorare lunghezza e valori. 650 00:36:17,000 --> 00:36:21,000 Un int sta per essere a 32 bit, non importa ciò che si digita in là, quindi cerchiamo di lasciare il campo vuoto. 651 00:36:21,000 --> 00:36:24,000 Il valore di default, che potrebbe rendere nullo, come definito. 652 00:36:24,000 --> 00:36:27,000 Ho intenzione di lasciare che da sola. Cerchiamo di non preoccuparsi di valori predefiniti. 653 00:36:27,000 --> 00:36:29,000 Facciamo scorrere qui a destra, attributi. 654 00:36:29,000 --> 00:36:31,000 Questo è interessante. 655 00:36:31,000 --> 00:36:33,000 Andiamo avanti e un po 'arbitrario dire che gli ID devono essere senza segno. 656 00:36:33,000 --> 00:36:35,000 Cerchiamo di non perdere tutti i numeri negativi. 657 00:36:35,000 --> 00:36:37,000 >> Andiamo 0-4000000000, prendere o lasciare, 658 00:36:37,000 --> 00:36:40,000 e poi cerchiamo di non toccare uno di questi campi appena ancora là, 659 00:36:40,000 --> 00:36:43,000 ma poi fammi digitare nome quaggiù, 660 00:36:43,000 --> 00:36:46,000 e poi l'altra era posta, in modo che il fermo è posta 661 00:36:46,000 --> 00:36:50,000 e il nome, ovviamente, non interi, quindi cerchiamo di cambiare per un campo diverso. 662 00:36:50,000 --> 00:36:53,000 Si scopre varchar, lunghezza variabile char, 663 00:36:53,000 --> 00:36:56,000 è come una stringa in un database SQL 664 00:36:56,000 --> 00:36:59,000 ma di lunghezza variabile, e che in realtà hanno a segnalare in anticipo la 665 00:36:59,000 --> 00:37:02,000 lunghezza massima della stringa, quindi ho intenzione di un po 'arbitrariamente 666 00:37:02,000 --> 00:37:05,000 per tipo di convenzione 255 caratteri. 667 00:37:05,000 --> 00:37:08,000 Potrei dire tutto 32. Potrei dire 1.000. 668 00:37:08,000 --> 00:37:11,000 Si tipo di necessità di decidere per se stessi, sulla base di dati demografici ciò che è 669 00:37:11,000 --> 00:37:14,000 la più lunga studente nome e andare con quel numero o un po 'più grande, 670 00:37:14,000 --> 00:37:17,000 ma ciò che è bello di un varchar è che non sta andando a perdere 671 00:37:17,000 --> 00:37:19,000 255 byte sul nome di ogni studente. 672 00:37:19,000 --> 00:37:23,000 Se è DAVID non è intenzione di utilizzare un intero 255 byte, 673 00:37:23,000 --> 00:37:26,000 ma questo è un limite superiore, quindi vado con 255 solo per convenzione, 674 00:37:26,000 --> 00:37:30,000 ma potremmo discutere che, per essere un po 'di valore inferiore, e per l'indirizzo e-mail 675 00:37:30,000 --> 00:37:34,000 tanto per essere coerenti 255, ma ancora una volta, potremmo avere lo stesso dibattito. 676 00:37:34,000 --> 00:37:36,000 Ma ho intenzione di fare una cosa qui sulla destra. 677 00:37:36,000 --> 00:37:40,000 >> Cosa c'è di potente su un database è che può fare un sacco di sollevamento di carichi pesanti 678 00:37:40,000 --> 00:37:42,000 o complesso lavoro per voi. 679 00:37:42,000 --> 00:37:46,000 In particolare, davvero non mi importa quali numeri ID miei studenti sono. 680 00:37:46,000 --> 00:37:49,000 E 'solo vuole essere un identificatore univoco in un database 681 00:37:49,000 --> 00:37:52,000 quindi ho una rappresentazione a 32 bit succinta di quello studente 682 00:37:52,000 --> 00:37:55,000 in modo da avere un modo per identificare in modo univoco le 683 00:37:55,000 --> 00:37:58,000 affinché non vi sia Davids 2, per esempio, in una classe. 684 00:37:58,000 --> 00:38:01,000 In effetti, ho intenzione di selezionare questa casella AI, incremento automatico, 685 00:38:01,000 --> 00:38:04,000 in modo che il database, MySQL, capisce 686 00:38:04,000 --> 00:38:08,000 ciò che ogni studente ID appena inserito sarà. 687 00:38:08,000 --> 00:38:11,000 Non hanno nemmeno bisogno di preoccuparsi che nel mio codice, 688 00:38:11,000 --> 00:38:13,000 e sto anche andando a scegliere qualcosa sotto il menu indice. 689 00:38:13,000 --> 00:38:17,000 L'indice a tendina qui è primario, unico nel suo genere, 690 00:38:17,000 --> 00:38:19,000 indice e testo completo. 691 00:38:19,000 --> 00:38:21,000 Si può forse immaginare quello che un paio di queste cose sono, 692 00:38:21,000 --> 00:38:24,000 ma si scopre in database relazionali 693 00:38:24,000 --> 00:38:28,000 che il programmatore o l'amministratore del database raggiungere preventivamente 694 00:38:28,000 --> 00:38:32,000 dare suggerimenti al database come a ciò che i campi 695 00:38:32,000 --> 00:38:34,000 in una tabella sono un po 'speciale. 696 00:38:34,000 --> 00:38:37,000 >> Per esempio, in questo caso ho intenzione di dire che ID 697 00:38:37,000 --> 00:38:42,000 sarà un indice primario, altrimenti noto come chiave primaria. 698 00:38:42,000 --> 00:38:44,000 Che cosa questo significa, per definizione, è che d'ora in poi ID 699 00:38:44,000 --> 00:38:48,000 si identificano in modo univoco gli studenti in questa tabella. 700 00:38:48,000 --> 00:38:53,000 Nessuno studente avrà lo stesso ID, perché sto imporre questo vincolo o questo indice. 701 00:38:53,000 --> 00:38:55,000 Inoltre, ciò che questo sta per fare per me è sta andando a raccontare 702 00:38:55,000 --> 00:38:58,000 MySQL che l'ID è speciale. 703 00:38:58,000 --> 00:39:03,000 Mi interessa in particolare su ID, in modo da andare avanti e fare la magia la struttura dei dati di fantasia, 704 00:39:03,000 --> 00:39:05,000 costruire una specie di albero. 705 00:39:05,000 --> 00:39:08,000 In genere si tratta di qualcosa che si chiama B-tree, che non abbiamo guardare alle settimane fa, 706 00:39:08,000 --> 00:39:11,000 ma è un'altra struttura di dati, ad esempio simile nello spirito agli alberi binari 707 00:39:11,000 --> 00:39:15,000 e prova che abbiamo guardato, ma sta andando a dire 708 00:39:15,000 --> 00:39:18,000 al database di questo campo è così importante che probabilmente 709 00:39:18,000 --> 00:39:22,000 Voglio essere in grado di cercare su di esso, andare avanti e costruire un po 'di fantasia 710 00:39:22,000 --> 00:39:25,000 struttura di dati in memoria per velocizzare le ricerche in modo che idealmente 711 00:39:25,000 --> 00:39:28,000 sono costante di tempo o almeno il più vicino possibile a quello 712 00:39:28,000 --> 00:39:32,000 in modo che non devolvere in ricerca lineare, che non sarà 713 00:39:32,000 --> 00:39:34,000 le più elevate prestazioni approccio. 714 00:39:34,000 --> 00:39:37,000 Al contrario, indirizzo e-mail potrebbe essere una chiave primaria. 715 00:39:37,000 --> 00:39:41,000 >> In teoria, l'indirizzo email di ognuno è unico nel suo genere, a meno che non stai condividendo un po 'di conto, 716 00:39:41,000 --> 00:39:45,000 ma non è generalmente buona per usare qualcosa come una stringa 717 00:39:45,000 --> 00:39:49,000 come chiave primaria, perché se il suo scopo nella vita è quello di identificare in modo univoco 718 00:39:49,000 --> 00:39:55,000 righe della tabella non c'è motivo di usare al massimo 255 byte 719 00:39:55,000 --> 00:39:58,000 per identificare in modo univoco a qualcuno se si riesce a cavarsela con soli 4 byte 720 00:39:58,000 --> 00:40:00,000 oppure a 32 bit int. 721 00:40:00,000 --> 00:40:03,000 In generale, una chiave primaria deve essere breve e concisa 722 00:40:03,000 --> 00:40:07,000 e, idealmente, qualcosa come un intero o un int grande, che risulta essere di 64 bit. 723 00:40:07,000 --> 00:40:11,000 Ma un indirizzo email dovrebbe essere unico, e una delle caratteristiche di un database troppo 724 00:40:11,000 --> 00:40:14,000 è quello di far rispettare l'unicità per me. 725 00:40:14,000 --> 00:40:18,000 Selezionando unico qui accanto a e-mail, anche se stessa e-mail 726 00:40:18,000 --> 00:40:21,000 viene fatto scorrere fuori dallo schermo, sto dicendo al database 727 00:40:21,000 --> 00:40:23,000 non mi fido. 728 00:40:23,000 --> 00:40:26,000 Non vorrei inserire nel database 729 00:40:26,000 --> 00:40:29,000 l'indirizzo e-mail due volte lo stesso, anche se sono un idiota e non sono 730 00:40:29,000 --> 00:40:32,000 molto buona con i miei se e se e penale e il codice PHP reale 731 00:40:32,000 --> 00:40:37,000 e ho accidentalmente consentire all'utente di registrarsi con un indirizzo email esistente 732 00:40:37,000 --> 00:40:40,000 il database è ancora un altro livello di difesa per correttezza 733 00:40:40,000 --> 00:40:44,000 per garantire che l'indirizzo e-mail duplicati non finisca nella tabella. 734 00:40:44,000 --> 00:40:49,000 >> Ora, invece, il nome probabilmente non si vuole fare questo unico 735 00:40:49,000 --> 00:40:51,000 perché allora non potrà mai essere di 2 o 2 Davids Smiths Mike, per esempio, 736 00:40:51,000 --> 00:40:55,000 nel database, in modo che uno ci lasciare soli. 737 00:40:55,000 --> 00:40:58,000 Ho intenzione di andare avanti e fare clic su Salva in basso a destra, 738 00:40:58,000 --> 00:41:02,000 e tutto sembra buono, a meno di notare qui 739 00:41:02,000 --> 00:41:04,000 questa è una parte che per ora non ci spendere troppo tempo su 740 00:41:04,000 --> 00:41:07,000 perché la sintassi è un po 'complessa, e non c'è bisogno di creare tabelle 741 00:41:07,000 --> 00:41:10,000 tutto ciò che spesso, ma SQL è di per sé un linguaggio, 742 00:41:10,000 --> 00:41:13,000 la sintassi per il quale è proprio qui che ho evidenziato. 743 00:41:13,000 --> 00:41:18,000 Che cosa fa veramente phpMyAdmin è crea un web-based GUI per voi 744 00:41:18,000 --> 00:41:23,000 con il quale è possibile risparmiare tempo e non dover digitare manualmente le 745 00:41:23,000 --> 00:41:26,000 una query SQL abbastanza lungo così. 746 00:41:26,000 --> 00:41:29,000 >> In altre parole, se si voleva creare manualmente questa tabella, 747 00:41:29,000 --> 00:41:32,000 sia a che phpMyAdmin in bianco e nero o anche in pronta 748 00:41:32,000 --> 00:41:35,000 utilizzando questa scheda altro, questa scheda SQL in cui è possibile digitare qualsiasi query SQL 749 00:41:35,000 --> 00:41:38,000 si vuole, francamente, questo mi avrebbe preso un minuto 750 00:41:38,000 --> 00:41:41,000 da ricordare in realtà la sintassi intero, e anche allora probabilmente sarebbe 751 00:41:41,000 --> 00:41:45,000 fatto alcuni errori di battitura, quindi questo strumento è utile per cose del genere, ed è anche istruttivo. 752 00:41:45,000 --> 00:41:49,000 È possibile iniziare a dedurre ciò che la sintassi è 753 00:41:49,000 --> 00:41:52,000 solo per il bel colore di codifica che phpMyAdmin è l'aggiunta di 754 00:41:52,000 --> 00:41:54,000 per nostra comodità visiva. 755 00:41:54,000 --> 00:41:56,000 Ma ora facciamo questo, invece. 756 00:41:56,000 --> 00:42:00,000 Lasciatemi andare alla scheda di inserimento in alto, e lasciami andare avanti e inserire, per esempio 757 00:42:00,000 --> 00:42:04,000 un ID, diciamo, in realtà non mi interessa. 758 00:42:04,000 --> 00:42:07,000 E 'intenzione di incremento automatico. Ho intenzione di lasciare che l'affare database con questo. 759 00:42:07,000 --> 00:42:11,000 Ma io sono Davide, e la mia e-mail dovrebbe essere malan@harvard.edu. 760 00:42:11,000 --> 00:42:16,000 >> Andiamo avanti qui e messo in Mike Smith come un altro. 761 00:42:16,000 --> 00:42:18,000 Io mi do un cognome così, 762 00:42:18,000 --> 00:42:22,000 e avremo essere lui smith@example.com, 763 00:42:22,000 --> 00:42:24,000 e poi dove devo andare dopo? 764 00:42:24,000 --> 00:42:27,000 Beh, sembra che andare è il pulsante per scegliere, e voilà. 765 00:42:27,000 --> 00:42:30,000 Notate gli ultimi 2 righe inserite. 766 00:42:30,000 --> 00:42:32,000 Questa è la query SQL effettivo. 767 00:42:32,000 --> 00:42:36,000 Questo è lo strumento phpMyAdmin eseguito per me, 768 00:42:36,000 --> 00:42:40,000 ma il risultato finale, avviso, se io ora andare alla scheda Sfoglia, 769 00:42:40,000 --> 00:42:43,000 è quello di vedere 2 righe in questa tabella, che ricorda molto esteticamente 770 00:42:43,000 --> 00:42:46,000 della tabella abbiamo visto in precedenza per i nostri utenti da pset 7, 771 00:42:46,000 --> 00:42:51,000 uno dei quali è David Malan, uno dei quali è ora Mike Smith. 772 00:42:51,000 --> 00:42:54,000 Ma tanto per essere chiari, non ho bisogno di usare phpMyAdmin, 773 00:42:54,000 --> 00:42:56,000 e in effetti, si sta andando ad essere presto la scrittura di codice per pset 7 774 00:42:56,000 --> 00:43:01,000 che automatizza il processo di aggiunta di righe, l'eliminazione di righe, aggiornano le righe e simili, 775 00:43:01,000 --> 00:43:04,000 per cui vorrei invece andare alla scheda SQL qui 776 00:43:04,000 --> 00:43:14,000 e digitare select * from dove gli studenti 777 00:43:14,000 --> 00:43:18,000 email "malan@harvard.edu." = 778 00:43:18,000 --> 00:43:21,000 >> In altre parole, supponiamo ora di avere 779 00:43:21,000 --> 00:43:26,000 qualche forma HTML, e l'utente digita il proprio indirizzo e-mail, tra gli altri settori, 780 00:43:26,000 --> 00:43:29,000 e l'obiettivo è ora in PHP sul codice back-end 781 00:43:29,000 --> 00:43:31,000 per cercare in realtà fino altri dettagli che dell'utente. 782 00:43:31,000 --> 00:43:34,000 Qual è il tuo nome completo? Qual è il tuo numero ID? 783 00:43:34,000 --> 00:43:37,000 Si potrebbe scrivere una query SQL come questo, selezionare * da parte degli studenti 784 00:43:37,000 --> 00:43:40,000 dove email "malan@harvard.edu." = 785 00:43:40,000 --> 00:43:46,000 E se poi clicca su OK, si noti che io, e in effetti io, tornare solo una riga. 786 00:43:46,000 --> 00:43:50,000 Mike è omesso da questo gruppo di risultati, come l'insieme delle righe 787 00:43:50,000 --> 00:43:53,000 viene generalmente chiamato, perché non hanno lo stesso indirizzo e-mail come me. 788 00:43:53,000 --> 00:43:57,000 >> Ora, di nuovo, qui per pset 7 userete phpMyAdmin come strumento di amministrazione 789 00:43:57,000 --> 00:44:00,000 e uno strumento pedagogico per imparare la tua strada 790 00:44:00,000 --> 00:44:03,000 nel mondo di SQL, ma alla fine della giornata 791 00:44:03,000 --> 00:44:08,000 hai intenzione di scrivere queste query all'interno di effettiva codice PHP, 792 00:44:08,000 --> 00:44:11,000 e quindi rimanete sintonizzati in procedura dettagliata Zamyla in particolare 793 00:44:11,000 --> 00:44:14,000 dove potrete fare un tour del codice di distribuzione per questo set problema 794 00:44:14,000 --> 00:44:18,000 in cui vi abbiamo dato non solo l'estetica della pagina di accesso 795 00:44:18,000 --> 00:44:21,000 e il bel logo sexy che dice CS50 Finanza, ma abbiamo anche dato 796 00:44:21,000 --> 00:44:24,000 un gruppo di funzioni che renderanno la vita un po 'più facile. 797 00:44:24,000 --> 00:44:27,000 Abbiamo anche scritto parte del pset per voi, 798 00:44:27,000 --> 00:44:32,000 la parte di login di esso, in particolare, per dare un senso di un disegno rappresentante 799 00:44:32,000 --> 00:44:36,000 che effettivamente utilizza un controllore, per esempio, index.php, 800 00:44:36,000 --> 00:44:40,000 login.php e simili, e poi vedrete il pset ha anche una directory dei modelli 801 00:44:40,000 --> 00:44:43,000 che ha tutte le vostre opinioni, tutti l'estetica. 802 00:44:43,000 --> 00:44:46,000 E così i flussi di lavoro in pset 7 è sarà che 803 00:44:46,000 --> 00:44:49,000 gli utenti visita un controller tramite un URL in un browser. 804 00:44:49,000 --> 00:44:53,000 Questo controller contiene codice PHP che hai scritto, e all'interno del codice PHP 805 00:44:53,000 --> 00:44:57,000 potrebbero essere alcune linee di SQL nidificato tra doppi apici 806 00:44:57,000 --> 00:45:00,000 e passato a una funzione che abbiamo scritto query denominato 807 00:45:00,000 --> 00:45:03,000 che vi aiuterà a parlare con il database senza utilizzare qualcosa di simile 808 00:45:03,000 --> 00:45:05,000 uno strumento di amministrazione come phpMyAdmin. 809 00:45:05,000 --> 00:45:08,000 >> Sarete in grado di scrivere istruzioni SQL in codice PHP 810 00:45:08,000 --> 00:45:11,000 e tornare un array PHP del set di risultati, 811 00:45:11,000 --> 00:45:14,000 delle righe che in realtà corrispondono a quella query. 812 00:45:14,000 --> 00:45:18,000 E allo stesso modo si sarà in grado di eseguire inserimenti o eliminazioni 813 00:45:18,000 --> 00:45:22,000 o aggiornamenti o simili, la sintassi per il quale è abbastanza simile, 814 00:45:22,000 --> 00:45:25,000 e vedrete da alcuni riferimenti on-line, a partire dal codice di distribuzione 815 00:45:25,000 --> 00:45:29,000 e dal pset pacco stesso esattamente come fare per farlo. 816 00:45:29,000 --> 00:45:33,000 Realizzare in ultima analisi, siamo davvero solo grattando la superficie di SQL 817 00:45:33,000 --> 00:45:36,000 e di MySQL, ma il potere di esso è davvero che ti libera 818 00:45:36,000 --> 00:45:40,000 mettere a fuoco i problemi che si vogliono risolvere, i casi d'uso che si desidera implementare 819 00:45:40,000 --> 00:45:43,000 senza doversi preoccupare abbastanza tanto, almeno nella fase iniziale, 820 00:45:43,000 --> 00:45:47,000 su dove e come memorizzare e ricercare il database, 821 00:45:47,000 --> 00:45:50,000 e questo è letteralmente in cui Facebook si è avuto il suo inizio 822 00:45:50,000 --> 00:45:53,000 utilizzando MySQL e quindi utilizzando più server MySQL e quindi più server MySQL 823 00:45:53,000 --> 00:45:57,000 in poco tempo fino a che non doveva poi iniziare a pensare davvero difficile su come 824 00:45:57,000 --> 00:46:00,000 memorizzare dati, come memorizzare le cose ancora più efficiente, 825 00:46:00,000 --> 00:46:04,000 quindi, anche se ci diamo per scontato il fatto che gli indici ei vincoli univoci 826 00:46:04,000 --> 00:46:08,000 e così via, solo di lavoro c'è una conversazione molto interessante 827 00:46:08,000 --> 00:46:12,000 che tutto questo può condurre a, in modo da rendersi conto che siamo solo di graffiare la superficie 828 00:46:12,000 --> 00:46:17,000 di ciò che potrebbe alla fine per voi oi vostri progetti diventano un po 'di dati di grandi dimensioni. 829 00:46:17,000 --> 00:46:22,000 >> Detto questo, cerchiamo di finire qui, e ci vediamo la prossima settimana. 830 00:46:28,000 --> 00:46:30,000 [CS50.TV]