[RIPRODUZIONE DI BRANI MUSICALI] DAVID J. MALAN: Va bene. Bentornato. Questo è CS50. Questa è la fine della settimana 8. E come sapete, abbiamo abbastanza orario d'ufficio regolari in alcuni delle sale da pranzo, compresi Annenberg. E alcuni dei team gentilmente ha preso alcune foto ultimamente. E in onore di Halloween, abbiamo pensato di condividere quello che invece ci ha colto di sorpresa qui in Annenberg padiglione appena l'altra sera. Il tuo compagno di classe Jacob ha posato per questa foto, ma era più divertente era su Facebook, la conseguente conversazione che è successo dopo. Il suo primo post in risposta per la sua foto era questo. Pochi minuti dopo, ha deciso ad uno se stesso con questo. Ha continuato poi ad andare a questo, e poi, ancora di più in modo divertente è quando sua madre intervenne. E quindi in ultima analisi, sembra che questo era solo un meraviglioso stratagemma per un gioco che sta succedendo. Quindi, se volete per vedere Jacob e gli altri, tra cui Cynthia Meng, che è dietro le quinte del personale zona CS50, testa a questo URL e questo gioco qui. Quindi, senza ulteriori indugi, oggi siamo continuare questo sguardo alla programmazione web, e la creazione effettiva dei programmi che non vengono eseguiti a riga di comando, ma invece eseguire all'interno di un browser. Presumibilmente ora, o molto in breve, si sta andando di essere nel bel mezzo di attuazione il proprio server web, che è differente dalla programmazione web. Il server web in pset6 è tutto software di scrittura che sa prendere Richieste HTTP da un browser, o anche da voi, un essere umano, con un programma chiamato Telnet, e poi rispondere a tali richieste o sputando fuori un file HTML, o un jpeg o gif, o anche un file .php. Ma con un server web, non è dovrebbe aprire solo un file PHP, qualcosa che termina in .php, e poi sputare il contenuto. Si dovrebbe fare ciò che a quel file prima? Per così dire. Non compilarlo, abbiamo detto il Lunedi, ma rather-- Quindi, interpretarlo. PHP è un linguaggio interpretato, e così una delle caratteristiche fondamentali del Web Server, seppur attuato da noi, è questa capacità per il proprio server web da notare, oh. Si tratta di un file con estensione .php. Permettetemi non mi basta inviare al utente come se fosse contenuto statico, ma mi permetta di leggere riga per linea, da sinistra a destra, e interpretarlo. E per farlo, che si ragazzi sarà essenzialmente punt a un programma nell'apparecchio, e un sacco di sistemi informatici, appena chiamato PHP. Questo è il nome del PHP interprete di lingua. Così, quel pezzo implementiamo per voi, e ciò che rimane per voi, infine, è un numero di pezzi, tra cui è l'attuazione del sostegno per i contenuti statici. Ma ora, e con problema impostare sette, sei sta per iniziare la transizione a in realtà la scrittura del codice PHP che verrà interpretato a parlare con un back-end database che memorizza le informazioni. Quindi cerchiamo di capire meglio prima un paio di questi superglobals e quanta potenza si uscire dalla scatola per libero con un linguaggio come PHP. Le cose non si dispone di per implementare voi stessi. Quindi, abbiamo visto il Lunedi $ _GET, che è un superglobale, che è solo PHP parlare per un globale variabile è possibile accedere ovunque. E quello che c'è dentro di $ _GET? Cosa c'è all'interno di questo superglobale che vediamo? Sicuramente statisticamente a almeno una persona sa. Che cosa c'è dentro di $ _GET? Sì? PUBBLICO: E 'le variabili si mette nella stringa di query. DAVID J. MALAN: Perfect. Sono le variabili inserire nella stringa di query. Quindi, nel nostro esempio precedente di reimplementare Google quando abbiamo avuto un URL, e quindi il punto interrogativo, che delimita l'inizio di HTTP parametri, poi abbiamo avuto q pari qualcosa, come q è uguale a gatti, ciò che sarebbe andato automaticamente all'interno di che $ _GET super-globale per voi, causa di PHP, è una chiave di Q, e del loro valore di gatti. In altre parole, $ _GET e tutti queste cose sono gli array associativi, tabelle hash di sorta, che le chiavi dei negozi e dei valori. Ora, nel pset5, l'hash tabella che si potrebbe avere attuato, o la si potrebbe provare hanno attuato, in realtà era effettivamente un associativa matrice, una struttura di dati in base al quale è possibile associare chiavi con valori. Ma in pset5, i valori erano banali. Il valore è sostanzialmente vero o falso. E 'la parola nel dizionario? Così, quando si hash una parola come mela per vedere se la mela è presente nel dizionario, la funzione di controllo presumibilmente tornato vero o falso. Quindi, questo è effettivamente il valore che stai ricevendo indietro. Ma abbiamo visto il Lunedi brevemente, si può certamente associare più interessante valori che solo vero o falso con i tasti, come Apple. Si potrebbe effettivamente restituire un stringa arbitraria, e in effetti, questo è quello che $ _GET e questi altre variabili consentono di fare. Quindi, $ _POST è simile nello spirito, ma se si invia un modulo via posta, un metodo HTTP diverso che è utilizzato per cose come le carte di credito, e informazioni private, e anche informazioni binarie come foto, quelle cose finiscono all'interno di $ _POST. E in realtà per i file come jpeg e quant'altro, c'è anche un altro che non è qui chiamato $ _FILES pure. Quindi, il server non ci dilungheremo troppo molto, ma ti dà accesso per ordinare dei dettagli di basso livello su il server stesso che si sta utilizzando. Cookie e seduta, però, faremo in modo efficace vediamo oggi. L'ultimo è quello che usiamo per implementare l'idea di un carrello della spesa. Un super semplice, ma di richiamo che abbiamo avuto questo esempio qui, contando quante volte si aveva visitato questa pagina prima. Ma oggi, piuttosto che guardare l'effetto di questo, apriamo up Ispettore di Chrome, che di solito si può fare cliccando con il tasto destro o Control Cliccando in qualsiasi punto di una pagina web, e poi scegliere ispezionare elemento. Oppure si può passare attraverso il menu che descriviamo nelle specifiche di pset6. E ho intenzione di scheda di rete qui, e cerchiamo di guardare per un momento il traffico HTTP che è andando avanti e indietro. Permettetemi innanzitutto di andare avanti e cancellare la cache di Chrome. Così alcuni di voi potrebbero avere familiarità già con questa tecnica, e abbiamo intenzione di usarlo a scopo di debug qui. Ora noi, come del computer gli scienziati stanno per iniziare facendo questo per il debug scopi, per cui ci sarà cancellare la cache, tipicamente, in modo da può sbarazzarsi di cose cd cookies. Quindi probabilmente stai generalmente familiare con ciò biscotti sono, o almeno che esistono, ma che cosa è la vostra comprensione di essi, come solo un utente di computer, che cosa è un cookie? Sì. PUBBLICO: E 'un po' di-- bene, non bit in un periodo di informatica. E 'un pezzo di dati che un sito manda a voi per per essere in grado di registrare le statistiche su di voi. DAVID J. MALAN: OK, bene. Quindi è un pezzo di dati che un del server, mette sul computer, e cerchiamo di generalizzare ancora di più, è una chiave value-- bene, che è sempre più precisa. Si tratta di un pezzo di informazione, un pezzo di dati, che un server è in grado di mettere sul vostro computer e molto spesso, il server fa questo al fine di ricordare chi sei. Così, per esempio, le probabilità sono probabilmente stai effettuato l'accesso a siti come Facebook, o Gmail, o altri prima, e si accede con il tuo username e password, e poi, dopo che, per un certo numero di di minuti o di ore o anche giorni, il server si ricorda che si sono, infatti, collegato. Ora, come è che effettivamente accadendo? Perché tu non sei certo ridigitare il tuo nome utente e la password ogni volta si passa a un pagina diversa su Facebook. Così si scopre il biscotti sono la risposta. Un cookie si può pensare come, Un po 'come, una mano digitale timbro che si potrebbe ottenere in un divertimento parco o un club che in sostanza Indica che sei stato qui prima, e hai già mostrato il vostro ID per il buttafuori, per esempio, e che il club o il parco dovrebbe ora pensare che si hanno già autenticato. Si sono già state identificate da essa. Quindi, con questo in mente, apriamo contatore in avanti qui. Lasciami andare avanti, ho appena fatto, e cancellare tutti i miei biscotti. E ora che cosa ho intenzione di fare è premuto il tasto Maiusc, per buona misura, e con la forza ricaricare la pagina. Maiusc basta assicurarsi che nulla viene memorizzato nella cache. Ed ecco la richiesta che è andato avanti e indietro. Quindi qui abbiamo una richiesta, e lasciamo mi zoom di qui, e un sacco di questo è una sorta di dettagli poco interessanti per ora che il browser ha automaticamente inviato, ma cerchiamo di fare clic su Visualizza Fonte per vedere le intestazioni prime. E se hai fatto immersioni in pset6 già, vi sarà certamente riconoscere le cose in questo modo, e forse un po ' di queste altre linee qui, ma ciò che è più interessante per oggi se ho scorrere verso il basso, non alla richiesta ma la cosiddetta risposta, questa linea probabilmente sembra familiare. Questa è una buona cosa quando si vede un 200 OK. A quanto pare questo è il la data e l'ora sul server e c'è un sacco di roba. Oh, questo è interessante. Si scopre che ogni volta che si utilizza PHP, almeno in questo server, il server sputa fuori che cosa versione di PHP che si sta utilizzando. Il che, in realtà, per la sicurezza scopi, non è una buona cosa. Ma, torneremo a quella un'altra volta, forse. Ma ora questa è la linea succosa oggi, e abbiamo visto brevemente alcuni di questi, Penso che con Facebook, quando ci veniva forato in giro per l'ispettore in quel momento, set di cookie è ciò che sta piantando quel piccolo pezzo di informazioni sul vostro computer. Ciò è un'intestazione HTTP che è efficace dire al vostro browser Chrome, IE, qualunque sia, hey browser archivio per l'utente del disco rigido, o nella RAM dell'utente, una chiave denominata PHPSESSID, che è un notazione abbreviata per ID di sessione, e dargli un valore di 0vlk8t, dot, dot, dot. Un posto davvero lunga pseudo stringa alfanumerica casuale. E 'solo un numero molto grande, ma è codificato con lettere e numeri in modo che la dimensione può essere ancora più grande di numeri da soli. E poi, tra l'altro, Path = /, che significa semplicemente che questo cookie dovrebbe essere associato totalità del sito web, non solo una specifica pagina il tutto. Quindi questo è che il timbro mano virtuale. E 'come se il server di Facebook, nel nostro caso l'apparecchio, 0vlk8t ha letteralmente scritto e così via, sulla vostra mano. Notate ciò che il server del, non farlo è che non è memorizzare il mio nome utente, certamente non memorizzare la password. Invece, sembra essere la memorizzazione delle informazioni pseudo casuali in modo che nessuno può indovinare qual è il mio timbro di mano è. Sul lato server, Nel frattempo, il server sta per ricordare, probabilmente in un database o qualcosa del genere, che l'utente, che in futuro presenta un timbro mano di 0vlk8t, dot, dot, dot, dovrebbe essere associata a questo particolare carrello della spesa, per così dire. In altre parole, se io ora vado di nuovo qui e ricarica questa pagina, come fa sapere il server che ho visitato una sola volta? O se lo faccio di nuovo, come fa il server So che ho visitato è due volte? Beh, se scendo a questo più recente richiesta, che ora è il terzo che ho inviato in totale, notare la mia richiesta ora. C'è ancora questo richiedere qui, stesso come prima, c'è ancora un sacco di roba che abbiamo ignorato come prima, ma l'ultima intestazione, questo tempo, perché sono stato qui prima, è una presentazione di questo francobollo mano virtuale. Biscotto per cui questa linea qui, non impostare ma biscotto colon PHPSESSI = 0vlk8t, questo è solo il mio browser di automatica presentazione di questo francobollo mano in modo che Ora il server, non appena si realizza, ooh, questo è utente 0vlk8t dot, dot, dot, Ora ricordo che lui o lei è e riassociare con quella dell'utente, indipendentemente informazioni che voglio, e tutti che le informazioni possono essere memorizzate da voi, il programmatore, in $ _SESSION. Quindi, per essere chiari, se apro reale veloce in gedit il file vero e proprio, counter.php, nel mio elenco pubblico host locale come prima, si noti che, in effetti, Sto in ultima analisi, la memorizzazione in $ _SESSION Tra virgolette "contro", il valore del contatore precedente, Che ricevo da queste righe qui che abbiamo guardato l'ultima volta più uno. Quindi, sotto il cofano, ecco tutti i cookie sono. E 'proprio il tipo di digitale timbro mano andando avanti e indietro, e francamente se si apre Chrome Ispettore su qualsiasi sito web si visita oggi, con altissima probabilità, si sta andando a vedere forse uno, forse una mezza dozzina di biscotti essere ricordato da voi. E peggio ancora, se i sito che stai visitando tutti hanno pubblicità, che è certamente abbastanza comune oggi, e se questi annunci sono in arrivo da qualche parte centrale, qualcuno come Google AdWords o in quanto chiamare uno dei loro prodotti o altri tali fornitori che vendere gli annunci, ciò che è interessante, e francamente ciò che è un po ' preoccupante, su come funziona HTTP, è che se si dispone di un annuncio incorporato in Facebook.com e Google.com, e Harvard.edu, un numero qualsiasi di siti web, in modo che sia tale che c'è un uomo di mezza che sta scontando up pubblicitari di tutti e tre questi siti web, si scopre che il i cookie sono per dominio. Quindi, se avete un annuncio proveniente dal stessa società su diversi siti web, che la società può effettivamente tenere traccia di chi tu sei in tutti quei siti. Harvard potrebbe non sapere si sta visitando Facebook. Facebook potrebbe non conoscere e si sta visitando Harvard. Ma qualunque servizio di annunci Stanno usando se tale dominio è presente in entrambi Harvard.edu web pagine e pagine web Facebook.com, questo uomo di mezza sicuramente sa chi sei a causa di questi biscotti condivise attraverso, o meglio a, che la cosiddetta intermediario. Quindi torneremo a questo in implicazioni per la sicurezza degli stessi, ma c'è un sacco di informazioni essere memorizzati su di te ogni volta che si visitare la maggior parte qualsiasi pagina web sul Internet e realmente riduce a questo meccanismo molto semplice. Cosa succede, allora, se sei super-paranoico e si decide di andare in Chrome o IE o qualsiasi altra cosa e disattivare i cookie? Che succede? Sì? Si really-- hai fatto questo diritto? Ok. No, andare avanti. PUBBLICO: Alcuni siti web non hanno una funzione senza di essa come Facebook. DAVID J. MALAN: Yeah! Così alcuni siti web sarà solo smettere di lavorare. E nella maggior parte dei siti web di questi giorni che fondamentalmente si basano su cookie, soprattutto se hanno si accede in, sono solo andando a rompere. Perché prendere in considerazione la alternativa, se il sito web non ha modo di ricordare chi sei, e quindi il vostro browser non è che rappresenta con ogni HTTP richiesta di questo francobollo mano, in modo efficace un sito web come andare di Facebook di dover richiedere di log in ogni volta darn si modificano le pagine, o fa clic su un link, che Non è sicuramente un utente particolarmente buona esperienza. Così che, anche, è tra i compromessi. Quindi, senza ulteriori indugi, diamo per scontato che con la programmazione web, in linguaggi come PHP, si può ricordare informazioni del genere in problema impostato sette anni quando si implementa il proprio Sito E * Trade-simile con cui acquistare e vendere azioni, vi ricordate esattamente ciò che l'utente ha acquistato e venduto e che lui o lei è a titolo di questa sessione. Ma stiamo andando ad avere bisogno un modo più elegante e-mail per iniziare a tenere le informazioni in giro. Giusto? Lunedi ', abbiamo parlato di Frosh IM e come in una versione di questo sito web, anni fa, tutti abbiamo fatto è stato e-mail il Proctor chi è responsabile degli sport da palestra programma, il nome e il genere, e anche se non sono un capitano, e il dormitorio di qualcuno che è registrazione per uno sport intramurale. Quindi non è male, ma lui o lei allora dovuto troll attraverso la loro e-mail, fare un foglio di calcolo o qualcosa di simile che, per mantenere tutto organizzato. Quindi, sicuramente noi, come i programmatori può fare questo per quella Proctor. E così entra in SQL, Structured Query Language, che sta andando a guardare piuttosto differente sia C e PHP, e ti immerge in molto di più mani su PHP e problema impostare sette, ma anche SQL, o SQL, questo è un linguaggio che si utilizza per parlare con un database. Ma che cosa è una banca dati? Beh, si pensa di un banca dati, almeno per ora, come solo di essere come un file Excel, o se sei un file di numeri utente a Mac, o se sei un Google Apps utente un foglio di calcolo di Google, è effettivamente un database, o realmente specificamente un database relazionale. Un database relazionale è solo qualcosa che ha righe e colonne, ed è possibile memorizzare qualsiasi tipo di informazioni di queste righe o colonne. Ma cosa c'è di bello su SQL, e su basi di dati reali, e non solo fogli di calcolo o fogli di calcolo di Google, è che si può usare una lingua per eseguire le query in realtà a inserire i dati, per rimuovere i dati, alla ricerca di dati, anche cosa più importante, e si non c'è bisogno di usarlo abbastanza manualmente come si potrebbe tipicamente un Google foglio di calcolo come questo. Quindi, in SQL, c'è un gruppo di dichiarazioni fondamentali o pezzi di funzionalità incorporata. Ci sono molti più di questi, ma si può andare una distanza enorme semplicemente sapendo che questo linguaggio chiamato SQL ha almeno quattro dichiarazioni è possibile sfruttare. Elimina, per la rimozione dei dati, Inserire, per l'aggiunta di file, Aggiornamento, per cambiare righe e Selezione, per ottenere di nuovo le righe e questo è davvero quello che fa SQL. Opera interamente su righe in modo che quando si inserisce o rimuove, o l'aggiornamento, oppure selezionare quello che stai tornare come un cosiddetto set di risultati, come una matrice di righe. Un gruppo di righe da una tabella. Quindi, di nuovo nel corso della giornata, e anche a questo giorno, è possibile interagire con il database utilizzando una riga di comando, ma non è particolarmente divertente da usare questa finestra in bianco e nero stile ed effettivamente eseguire comandi e curiosare il database. Un'interfaccia utente grafica, o GUI, è molto più preferibile, forse, e così lo strumento si consiglia e preinstallato per voi sull'apparecchio è chiamato phpMyAdmin. E 'una coincidenza totale che il nome di questa cosa ha PHP in esso, significa solo che il popolo che ha scritto questo programma si lo ha scritto in PHP. Ma è in ultima analisi, sull'amministrazione un server di database, come un server MySQL che si potrebbe avere, come si fare, l'apparecchio CS50. Quindi non c'è più in dettaglio qui di abbiamo bisogno di preoccuparsi di oggi, ma ciò che è fondamentale è che a sinistra lato è un elenco dei database che avete sul vostro computer, sul vostro apparecchio CS50, o venire progetti finali che si potrebbe avere su un terzo, di una società sito web o server web, che si potrebbe pagare per lo spazio. Quindi a sinistra è il database, una delle quali è pset7 che ho preso in prestito a partire dal prossimo settimane pset, e poi sulla cima ci notare c'è un mazzo di schede, una delle quali è database, SQL, lo stato, utenti, l'esportazione e così via. Così si può fare molto modo giusto realizzando che la maggior parte dell'interfaccia utente è nella colonna in alto a sinistra e nella parte superiore proprio lì. Che cosa possiamo realmente fare con questo? Bene, iniziamo la creazione di un bit di informazioni come segue. Supponiamo che il seguente è il caso, come sarà in pochi giorni, si desidera implementare un sito web, chiamato CS50 Finanza, e questo sito ti permette di acquistare tra virgolette e vendere azioni. E sta andando a capire il prezzo di tali titoli, in ultima analisi, come si vedrà, parlando con Yahoo Finance. Il che, meravigliosamente, dispone di un servizio gratuito in base al quale è possibile passare in una quotazione di borsa come GOOG per Google, e sarà dare indietro stock attuale di Google prezzo nel corso dell'ultimo pochi minuti almeno. Così che verrà utilizzato che, in ultima analisi, far finta per l'utente per comprare e vendere reale scorte che utilizzano denaro virtuale, ma la prima cosa l'utente sta andando a vedere È questa schermata di login che chiede loro per il loro username e password. E così, uno dei primi sfide per voi a pset7 sta per essere per attuare il back-end banca dati, il foglio di calcolo se si vuole, che sta per memorizzare I nomi utenti e le password e, infine, quali azioni di loro proprietà, e quanti, e quanto denaro che hanno, così un sacco di altre cose in altre tabelle o fogli di calcolo. Quindi, diamo un'occhiata a come questo potrebbe sembrare a prima vista. Ho intenzione di tornare a l'apparecchio e sono intenzione di andare a questo URL qui phpMyAdmin localhost / phpmyadmin e vedrete che mi porta a un'interfaccia esattamente come abbiamo visto sul screen shot, e qui mi disporre di un database aggiuntivo chiamato lezione per oggi e lasciami andare avanti prima e fare clic su pset7. Mi sembra di avere un paio di opzioni, uno per il nuovo, per la creazione di una nuova tabella, e un link per gli utenti, che è un tavolo ho già creato. Così che cosa è un tavolo? Quindi, se è stato utilizzato Excel prima, e se avete numeri usati o Google Fogli di calcolo, si apre una finestra e si ottiene un sacco di righe e colonne, ma poi di solito si hanno fogli di lavoro lungo il fondo, o schede separate. Si può pensare di ogni foglio di lavoro come una tabella in modo tale database, in definitiva, è un combinazione di una o più tabelle, una o più fogli, nel mondo di un foglio normale. Quindi lasciami andare avanti e clicca su questo foglio di lavoro che ho già pronti, chiamati gli utenti, pseudonimo Tabella di database. E se ho scorrere verso il basso qui, mi permetta di eseguire lo zoom indietro un po ', questo è ciò che sta dicendo phpMyAdmin noi è all'interno di questa tabella al momento. E 'un po' di confusione in un primo momento sguardo perché l'interfaccia utente non è la cosa più bella del mondo, ma ciò che è interessante è questa parte qui. ID, il nome utente e hash. In anticipo, e ti verrà consegnato questo problema impostare sette, vi diamo un file contenente un super tabella di database piccolo, preso in prestito in realtà dall'edizione degli hacker del problema impostare due, all'interno della quale ci sono sei righe. Uno per Belinda tutte le fino in fondo a uno per Zamyla, e notare a fianco di quelli nomi utente sono ID univoci come uno, due, tre, quattro, cinque, sei, numeri interi, e poi a destra sono hash. E se, le probabilità sono, non hai fatto il problema edizione di hacker ha impostato due, ma un hash è proprio come un crittografato la password con alcune precisazioni. E così, quello che vedete qui sono le versioni crittografate di tutti e sei delle nostre password da problema impostare edizione due hacker. Ora a sinistra è solo un po 'di roba GUI, modifica questa riga, la copia di questa riga, l'eliminazione di questa riga. Ma ciò che è interessante Ora è il seguente. Posso effettivamente iniziare la sperimentazione di questa tabella. Quindi, se vado e fare clic sul SQL scheda, ho questa grande casella di testo. E questo non è il modo in cui andremo a farlo quando in realtà la scrittura di codice. Per essere chiari, phpMyAdmin è solo uno strumento che è andando a farci curiosare database e di farci sperimentare con le query. Così, per esempio, si supponga che Eseguo esattamente questo. Seleziona, che è uno di quelli parole chiave che ho menzionato prima, stelle, che rappresenta tutto le colonne di una tabella. Da quello tavolo? Beh, gli utenti. E notate c'è questo convenzione strano in SQL dove effettivamente utilizzati indietro zecche, in genere, Non apici singoli e non doppi quando si parla di tabelle nomi, così la citazione posteriore è la cosa sul in alto a sinistra della tastiera più probabile. Quindi lasciami andare avanti ora e lasciare che da sola e scorrere verso il basso e fare clic su Vai, e siamo in realtà andando a vedere la stessa cosa. Abbiamo appena eseguito una query SQL dicendo selezionare tutto stelle da tavolo chiamato degli utenti, e quello che si ottiene di nuovo è questo. In ultima analisi, noi saremo in grado di fare la stessa cosa nel codice, ma per ora tutto quello che volevo non era vederlo nel mio browser. Beh, facciamo qualcosa un po 'diverso. Torniamo alla scheda SQL, e diciamo solo che cosa? Zamyla ha perso tutto il suo denaro, e quindi è giunto il momento di cancellare il suo come un utente. Non è più l'accesso. Quindi ho intenzione di dire eliminare from-- bene, mantenere la capitalizzazione per coerenza, eliminare da parte degli utenti dove. E così, possiamo avere questi predicati, o questi qualificazioni, alla fine del mio intervento dove e come potrei eliminare Zamyla? Con il suo nome Zamyla, in modo che il Colonna, una delle colonne è stato nominato, in modo da dove name = "Zamyla". E qui io uso doppia virgolette o apici singoli, si usa solo la parte posteriore zecche quando parlando di nomi, per esempio, di tabelle o campi. E mi permetta di fare clic su Vai qui. E ora, la pagina web è essere un po 'teso. Oppure, vuoi veramente eseguire cancellare da parte degli utenti cui nome è uguale Zamyla? Sì. Così ora, se torniamo al mio tavolo dagli utenti cliccando, notare che Hm. Ho preso una cantonata. E infatti, io tipo di cliccato via così in fretta non hai nemmeno vedere il messaggio di errore rosso, forse. Che cosa ho fatto di sbagliato? PUBBLICO: Non hai bisogno di capitalizzare il suo nome. DAVID J. MALAN: Sì, lo capitalizzato il suo nome, ma il suo username-- in realtà io fatto un paio di errori, giusto? Uno, il suo nome utente è zamyla, minuscolo Z, e il nome della colonna è il nome utente, non il nome, quindi cerchiamo di farlo di nuovo. Lasciami andare avanti e eliminare dagli utenti in cui nome utente uguale tra virgolette "Zamyla". Bene? Quindi questo sembra un po 'meglio, lasciare che andare scorrere verso il basso e fare clic su Vai. E 'ancora in corso a urlare contro di me per essere sicuro. I Fare clic su Sì, e ora ci vedo, francamente questo è accaduto, davvero veloce, meno di un secondo dubbio, questo è esattamente la query che ha ottenuto eseguita. Per confermare, mi permetta di fare clic su Utenti e in effetti ora Zamyla non c'è più. Ora facciamo il contrario. Supponiamo che Gabe vuole iscriversi al sito. Qual è la query SQL, qual è il comando potrei digitare aggiungere Gabe? Beh, è ​​abbastanza semplice. Inserire in utenti, e ora diventa un po 'criptico. Ho bisogno di specificare, al server, quali campi che voglio assegnare. Non mi importa di quello di Gabe ID numero è, quindi ho intenzione di saltare questo. Io invece intenzione di dire nome utente, hash, e poi i valori che vogliono mettere ci sta per essere Gabe. E poi il suo hash, non lo so. Quindi per ora, ho intenzione di lasciare che, come un grande da fare. Torneremo a che nel problema impostato specifiche su come effettivamente farlo. Così notare, ancora una volta, la sintassi. Inserire nel nome della tabella, quindi una Parentesi elenco dei campi, le colonne che si desidera aggiungere valori a, e poi basta lo stesso ordine esatto sinistra a a destra dei valori che si desidera aggiungere, ed è proprio da imballaggio in quanto il testo è un po 'lungo. Così ora mi permetta di fare clic su Vai. Una riga inserita. E ora se dovessi tornare a gli utenti, ciò che è interessante è che non solo è Gabe ora nel base di dati, ciò che è apparentemente il suo ID? Beh, è ​​sette. Perché è sette anni quando io non aggiungerlo? Quindi anche questo è uno dei caratteristiche si ottiene del database. Un sacco di costruito in funzionalità. Si scopre che, quando creato questa tabella, I preconfigurati che è automaticamente assegnare un ID in modo che incrementa. Quindi, se hai mai curiosato, e guardò che cosa il vostro Facebook ID numero è, in questi giorni non è davvero una cosa da fare, ma Facebook come una API, Application Programming Interface, in base al quale si può tornare indietro un sacco di dati su te, per i tuoi amici, e le connessioni. E che cosa ha usato per essere gentile di fresco, di nuovo nel corso della giornata, è stato quello di cercare ciò che il vostro Facebook numero ID è stato. Mark Zuckerberg di, per esempio, è tre dato che era l'autore del sito. E come va la storia, ha creato due account di prova, gli utenti uno e due, che poi cancellato. E così, Zuck, come è il suo nome utente su Facebook, è il numero ID di tre, e tutti noi abbiamo un numero molto più grande di tre in questi giorni. Infatti, ad un certo punto Facebook si allontanò da anche con un int, che è un valore di 32 bit, all'utilizzo il passo successivo, essenzialmente un lungo lungo in modo che potevano ospitare ancora di più gli utenti si iscrivono. Quindi un po 'fatto storico divertimento. Ecco, questo è proprio il sintassi di base con la quale potremmo eseguire un paio di query, ma possiamo in realtà fare un po 'di più le cose con SQL. E vedrete, in ultima analisi, nel problema impostare sette che si deve fare una numero di decisioni di progettazione, tra i quali sta per essere quali tipi di dati da utilizzare. Quindi, proprio come in C, ci sono dati tipi in un database, come MySQL, ed i tipi di dati che si devono scegliere da includere questi campi qui. Char, varchar, int, int grande, decimale e data ora, e molti altri. Quindi cerchiamo di fare questo in realtà. Facciamo finta che non abbiamo fatto mano che il tavolo di questo utente e lasciami andare avanti e creare, per io stesso, nel corso delle lezioni database-- in realtà mi permetta di andare avanti e cancellare la tabella che ho qui già in modo da poter effettivamente creare questo. Ops. Ho intenzione di abbandonare questo tavolo, e ora sono intenzione di andare di nuovo al lezione del database qui, Ho intenzione di creare una tabella chiamate utenti e cerchiamo di basta fare tre colonne inizialmente e fare clic su Vai. Ora, per la maggior parte, ancora una volta, questo è solo utilizzando questo strumento grafico chiamato phpMyAdmin, e quello che stiamo facendo ora è la creazione di una tabella. Quindi questo è come andare su File, Nuovo, e la creazione di un nuovo file di Excel. Quindi mi sta chiedendo alcuni domande, da sinistra a destra, qual è il nome della prima colonna, quindi il nome della seconda colonna, e il nome del terzo. Quindi cerchiamo di ricreare questo. ID, e quindi il nome utente è stato uno, e poi hash è stato un altro. Che cosa si deve il tipo di dati essere ora un campo come ID? Ecco la lista completa dei tipi di dati a vostra disposizione in un database, e per ora facciamo solo andare con int. Valore a 32 bit, non lo faccio che realisticamente sono andando ad avere più di 4 miliardi gli utenti nel mio account, nel mio servizio, così ho intenzione di tenere in movimento alla prossima domanda. Non ho intenzione di specificare una lunghezza o valori, non è applicabile qui per un int, per sé. E ora posso specificare, a quanto pare, un default valore, che non ho intenzione di specificare. Le regole di confronto, non so di cosa si tratta. Un attributo. Ora abbiamo effettivamente facciamo una decisione di progettazione. Quindi c'è qualche campo qui, non tutti dei quali si applica, ma non firmato significa semplicemente che cosa? Che l'int deve essere? Basta non negativo. Quindi deve essere 0 su. No, non ho intenzione di controllare perché Voglio ogni utente di avere un ID, non può essere nullo. E poi, si arriva a un po 'di più decisioni di progettazione interessanti come questo. Torneremo a questo in un momento, ma ciò che un'altra caratteristica di base di dati è, è che si può dire il server di database andare avanti e ottimizzare te stesso, la tua RAM e spazio su disco rigido, in modo che seleziona e inserti, e elimina, e gli aggiornamenti sono veramente veloce. In contrasto con pset5. Se si voleva cercare qualcosa nella tabella hash, che si pensa come un database, che ha dovuto fare tutto il lavorare per rendere la vostra tabella hash veloce. E 'come, ovviamente, si. Giusto? Dovevi mettere in tutto il tempo bene messa a punto le cose, ottenendo una funzione di hash a destra, per capire come molti secchi di avere. Ma ciò che è bello, ancora una volta, circa un database basta punt tutti questo ad altre persone che hanno pensato che questo attraverso di voi, e che cosa Io vado a dire qui sotto indice è che il mio campo ID sta per essere il modo principale di identificare gli utenti in questo database. Non ho intenzione di pensare di Zamyla come Zamyla, Ho intenzione di pensare a lei come il numero 6. Perché è, forse, meglio intuitivamente pensare e il modello ciascuno dei vostri file individuali con un numero invece di qualcosa come una corda, come il Zamyla o Gabe o stringa più lunga ancora? Sì? PUBBLICO: Un ID è unico? DAVID J. MALAN: dire ancora? PUBBLICO: Un ID è unico? DAVID J. MALAN: Un ID è unica, ma suppose-- se del caso, in generale, con nomi utente, supponiamo Ho anche detto che ci può essere un solo Zamyla nel mondo, e solo uno Gabe. Ho potuto imporre l'unicità vincolo sulle stringhe, anche se avessi voluto. Quindi non è un cattivo pensiero. PUBBLICO: Più sicuro. DAVID J. MALAN: Più sicuro, perché? PUBBLICO: Non si può dire che è che, come in uso. DAVID J. MALAN: OK, non può dire quale utente è che quindi c'è una privacy aspetto da esso, specialmente se gli ID forse che appare negli URL. Così sicuro, che potrebbe tipo di lavoro, anche. Altri pensieri? Sì? PUBBLICO: E 'più facile eseguire operazioni su un int. DAVID J. MALAN: Questo è il vero kicker. E 'solo più efficiente, o più facile per il computer, per eseguire operazioni su un numero intero. Giusto? Un int è garantito per essere a 32 bit, mentre Zamyla è lungo un paio di caratteri, Gabriel è lungo un paio di caratteri, Davenport è davvero lunga, e quindi è non particolarmente efficiente usare stringhe per confrontare i valori e guardare per i campi, e campi di aggiornamento, se si può uscire con un solo numero intero. A soli 32 bit. Quindi nomi utente, anche, in questo modo, non c'è bisogno di essere unico, anche se probabilmente dovrebbe essere, e anche in questo modo troppo un utente potrebbe essere consentito di cambiare il proprio nome utente. Quindi cerchiamo di ora lasciare questo come il mezzo principale di identificare l'utente. Questo dice la banca dati andare avanti e ottimizzare te in modo che i look up su ID sono super veloce. AI, orribilmente nome, solo significa Incremento automatico, e questo è il controllo Box abbiamo bisogno di controllare per specificare che il campo ID essere aggiornati automaticamente per me, e poi ho intenzione di scorrere verso destra qui e francamente io non sono realmente interessati in più di questi campi. Di certo non oggi. Quindi ho intenzione di tornare qui, la prima colonna, dove Ho bisogno di specificare il nome utente e hash, e cerchiamo di almeno focus sulla secondo per ora. Int non è probabilmente la scelta giusta, così che cosa ha più senso, forse? PUBBLICO: Testo. DAVID J. MALAN: dire ancora? PUBBLICO: Testo. DAVID J. MALAN: Testo? OK, ho sentito il testo. Cos'altro? Abbiamo tipo di avere un gruppo di scelte che sono testuali in natura. Così, quando, e perché, fare di utilizzare alcuni di questi? Beh char, contrariamente a quanto si potrebbe pensare, non è un singolo carattere. E 'un numero specifico di caratteri. Quindi, se sappiamo che tutti i nomi utente deve essere come otto caratteri, come usato per essere comune a più vecchio sistemi informatici, potrei dire char e poi potrei dire 8 qui. Questo è quando la terza colonna diventa applicabili durante la creazione di una tabella. Ma questo è un po 'fastidioso perché alcune persone potrebbero vogliono avere un nome utente più di otto caratteri, alcune persone potrebbero voler disporre di un nome utente più breve, quindi perché mi impegno per un numero specifico? Perché non avere una variabile numero di caratteri e solo dire che la lunghezza massima di un nome è, non lo so, come 64 caratteri. Non riesco a pensare a degli amici che hanno nomi più lungo di 64 caratteri, e anche se è troppo corto si potrebbe certamente aumentarlo arbitrariamente. Così varchar è una variabile numero di caratteri. Il testo non è un cattivo istinto, e francamente che tipo di fa quello che dice, tuttavia il campo di testo può essere come 65.000 byte almeno. Questo è probabilmente eccessivo per un campo, e in effetti, proprio così, 65.535. Questo è probabilmente eccessivo per un nome, quindi ci atteniamo, in genere, con VARCHAR per testuali campo e hash, troppo. Hash, si scopre, si potrebbe fare un varchar così o qualcosa del genere, ma non ci concentreremo oggi sul la crittografia lì e numeri che potrebbe effettivamente consiglia di utilizzare per la sua lunghezza. Ma mi permetta di scorrere verso il basso a destra. È possibile avere un solo indice primario per una tabella, ma voglio applicare uno di questi, ora, per il nome utente, diresti? Che cosa dovrebbe nomeutente essere basata su un vago comprensione di queste quattro opzioni? Solo con il loro nome? PUBBLICO: Unique. DAVID J. MALAN: così unico, giusto? Così si scopre che non solo poteva dici di un database, in anticipo, questo è il modo primario di individuare campi. Si può anche dire che questo è sarà un campo univoco. Non sarà la cosa mi baso su, ma vorrei che la base di dati di in sostanza, avere quella se la condizione, in modo da che se avessi mai provato a registrarmi due utenti con lo stesso nome, la flat out del database non ha intenzione di lasciarmi. Potrei avere qualche codice aggiuntivo in PHP che impedisce tanto, ma il database, inoltre, può garantire che questo è mai succederà. Ora, per inciso, tanto più pensi di progetti finali, tenere a mente l'indice e completa testo sono in realtà molto utile. Se si dispone di un database più grande, non con decine, ma con centinaia o migliaia o addirittura milioni di campi, è possibile anche dire la base di dati in anticipo questo è un campo che sto di essere alla ricerca su un terreno. Forse il suo nome utente, forse è bio, se siete fare un sito web di Facebook, come quello ha punti che l'utente è permesso per salvare, e se si vuole dire il database in anticipo Ho intenzione di essere alla ricerca in questo campo molto, ma non è necessariamente unico, è possibile specificare me creare un indice. In alternativa, si può dire anche permettere che io faccia sorta di perquisizioni arbitrarie come Command o di controllo F, come voi potrebbe in un elaboratore di testi, così si poteva guardare stringhe arbitrarie o sottostringhe in questo campo. In altre parole, stiamo ottenendo al punto nel semestre dove non dovete preoccuparvi di come implementare le cose in modo efficiente. Hai solo bisogno di sapere su che cosa decisioni di progettazione per fare in modo che tu sia utilizzando gli strumenti giusti per il commercio, al fine di sfruttare le caratteristiche che altre persone hanno costruito per voi. Quindi, per ricapitolare, primario dovrebbe solo avere uno, si può avere un solo, ed è la cosa che sta impegnandosi a usando per identificare in modo univoco i campi. Unico è solo simile nello spirito, ma si potrebbe solo occasionalmente utilizzarlo, ma si desidera che il database di imporla. Indice significa solo preventivamente accelerare le cose in futuro in modo che posso cercare le cose in questo campo. E poi il testo completo è in generale per paragrafi, o saggi, o grandi enti di testo in cui si potrebbe anche avere jolly come l'equivalente della stella. Destra. In modo che era una sorta di molto a tutti in una volta. Vediamo se non siamo in grado di distillare un paio di queste caratteristiche e poi costruire qualcosa abbastanza semplice, ma potente. Così tra l'altro decisioni di progettazione che siete in ultima analisi, sta per avere è lungo le linee di motori di archiviazione. E vorrei solo fare menzione di questo in previsione di progetti finali, e l'anticipazione di LET'S say-- non facciamo questo. Costruiamo questo piccolo prima applicazione. Ho intenzione di andare nel mio terminale finestra, e qui non è solo counter.php, che ora stiamo andando per sbarazzarsi di come non più germano, ma abbiamo un sacco di directory e questo sta per essere molto simile nello spirito di quello che vedrete nel problema impostare sette. Quindi abbiamo tre directory include pubblici e modelli, che è esattamente dove avevamo lasciato su Lunedi con tutto il nostro paradigma MVC. E per ricapitolare, in pubblico sta per andare tutti i file che voglio agli utenti di realtà v essere in grado di visitare in proprio browser mediante URL. Template. Che cosa abbiamo messo in modelli? Che tipo di cose? Non c'era molto ma un paio file di almeno il Lunedi. Sì. PUBBLICO: Intestazione e piè di pagina? DAVID J. MALAN: Intestazione e piè di pagina. Così abbiamo qualcosa di simile anche oggi. Abbiamo un paio di file, ma Piè di pagina vedo, intestazione vedo, e poi un sacco di altri file. Quindi questo è l'equivalente della vista V MVC, che, di nuovo, sarà un po 'più chiaro nel problema set di sette, ma questo è solo una cartella sono mettendo un sacco di miei estetica. Un sacco di mia HTML, un sacco di mie forme. Nel frattempo, comprende, è un altro directory che ha questi tre file e diamo un rapido sguardo a questi. Ho intenzione di andare avanti e di aprire config.php. Come si è visto, molto come in precedenza nel termine, si sharp incluso CS50 dot h con pset7. Nell'esempio di oggi, si sta andando per fare l'equivalente di tale con una dichiarazione richiedere che effettivamente comprende le diverse linee. Quindi, per essere chiari, questo è un file chiamato config.php. E notare quello che sta facendo. E 'a quanto pare fare qualcosa criptici svolta sui messaggi di errore, in modo che li si può vedere nel browser. È, poi, pare richiede altri due file quindi questo è come #include in C, e allora questo abbiamo visto, e ci siamo affidati a, questo si accende carrello della spesa che come funzionalità. Ciò significa che una volontà biscotto essere inviati avanti e indietro. Allora, perché è interessante? Beh, se torniamo a questo directory e aprire, per esempio, constance.php. Si noti che PHP fa costanti di sostegno, non è abbastanza come #define in C. Al contrario, è letteralmente dire definiti, e l'avviso che ho memorizzato in anticipo quattro costanti in questo file. Uno per il database di oggi, per la mia parola d'ordine, per il mio nome utente, e per il nome del server. Quindi, questi sono in realtà per essere molto simile a problema impostare sette. E, infine, e questo è dove sono intenzione di ottenere qualche bella funzionalità da parte del personale, in functions.php è un mucchio di codice che abbiamo scritto, e ho rubato un po 'di questo dal problema impostare sette per oggi, che fa un sacco di cose e diamo un'occhiata ad uno di essi in particolare. Questa funzione qui, ricerca, sta per essere la funzione di PHP che chiamiamo per eseguire SQL. Un momento fa eravamo con phpMyAdmin, ma questo è solo per genere di scopi di apprendimento e scopi diagnostici e dimenticando il set di database. Quando si utilizza la realtà database, è, l'umano, sono ovviamente non andare da tirare su un sito web pagina ogni volta che qualcuno registra. Hai intenzione di scrivere codice che Inserti e cancella gli utenti on demand, e stiamo andando a fare questo mediante la funzione di interrogazione. Se ora scorrere verso il basso, c'è sarà un paio di caratteristiche. Redirect sta per essere una funzione che abbiamo scritto per te, che si permette di inviare l'utente ad un altro URL, e il rendering è una funzione, piuttosto come abbiamo visto il Lunedi, che in realtà rende un template, ma più su questi in forma di cammino proprio di pset7 attraverso. Per ora, andiamo avanti e fare questo. Lasciami andare nel mio tavolo conferenze e vedi che non c'è attualmente nulla qui appena ancora, e fammi anche andare nel mio elenco pubblico, dove c'è solo un unico file, index.php. Questo file sembra essere super semplice al momento, sembra proprio come questo. Molto simile il modo in cui lasciato fuori il Lunedi. Sto richiedendo questo file, config.php, che è in una comprende directory, che è in punto punto, i miei genitori, e poi è solo il rendering questo file. Così che cosa è questo file? Apriamo nei miei modelli form.php, e vedremo questo. Super semplice, a quanto pare questa forma è andando a presentare entro un $ _GET o $ _POST. Controllo di integrità rapida. Letteralmente cercare visivamente il file. Metodo equals posta. Quindi non sta andando a utilizzare l'URL, come Google fa, sta andando a ordinare di pelle le informazioni dietro le scene e il suo andare a sottoporsi ad un file chiamato register.php, e questo è il file non abbiamo ancora scritto ma ciò che questo sta andando a guardare come è questo. Se vado ad una pagina a parte questo è cosa localhost / index.php assomiglia. E ancora, il server di solo assumendo index.php. Invio. Ecco dove siamo a, e quello che voglio fare è in grado di scrivere cose come Davide, e poi il mio numero di telefono, che dire 617-555-1212 per ora, registrati e ora register.php non è stato trovato. Quindi ho bisogno di implementare questa. Quindi cerchiamo di frusta in fretta qualcosa di simile a questo. Lasciami andare nel mio elenco pubblico e fare gedit di register.php, e ora ho intenzione di andare avanti e avviare la modalità di PHP, come abbiamo fatto il Lunedi, e tag di chiusura di PHP, e facciamo un paio di cose. Quindi, lo so, da aver scritto quella forma, che voglio verificare quanto segue. Se è vuoto, qualunque sia l'utente digitato il campo del nome, quindi Sto per dire qualcosa come chiedere scusa manca il nome. Apologize, nel frattempo, è non una cosa costruita nel PHP, si tratta di una funzione che abbiamo scritto in functions.php per pset7 in modo da avere accesso ad esso. Altrimenti, se l'altro campo è vuoto, il numero, allora sono intenzione di chiedere scusa al utente e dire numero mancante. Salvare il file. Ora torniamo al mio browser, tornare al forum riprovare. Registrati. Ok. Non è successo niente, che è buono. Non ho ricevuto un messaggio di errore. Ma se invece, cerchiamo di ricaricare questa pagina, e non fornisce nulla. Accidenti. Farlo. Registrati. Che cosa ho fatto di sbagliato? Se vuoto, il nome $ _POST. Dire di nuovo? Oh, certo. Ho dimenticato la parte più importante, che è require ("../ include / config.php."). Ho bisogno di avere accesso al funzione di scusarsi, che è il motivo per cui non succedeva niente. La funzione in realtà non esiste. Quindi, proviamo di nuovo. Cerchiamo di ricaricare la pagina, fare clic su Registra. Ok. Eccola. Così, l'uscita siamo vedendo qui è il risultato di chiamare una scusa funzione, super semplice, e viene stampato appena fuori qualunque cosa Ho dato come argomento. Va bene, quindi cerchiamo di cooperare. Cerchiamo di fornire il mio nome come David, registrare, manca il numero OK LET'S prevedere che, troppo. 617-555-1212. Registrati. Ok. Quindi va tutto bene ora, proprio niente interessante sta accadendo. Così ora facciamo qualcosa di più interessante come questo accada. Lasciami andare in phpMyAdmin, e cerchiamo di effettivamente creare una tabella denominata utenti, Ho intenzione di dare tre colonne, e mi prende subito creare ID, e poi nome, e poi il numero, e il campo ID io sono intenzione di lasciare come un int. Il campo del nome che sto lasciare come varchar, e diremo a 64, un po 'arbitrariamente. Il numero Vado da fare, sai una cosa? Stiamo andando in sostenere numeri degli Stati Uniti qui, così ho intenzione di fare qualcosa come char e poi 10 caratteri max per un codice di area e poi sette cifre. E poi qui, ho intenzione di specificare incremento automatico questo campo, fanno di questo una chiave primaria, e Ho intenzione di andare avanti e non controllare qualsiasi di queste altre caselle. Così, quando ho finalmente fare clic su Salva, e torno al mio tavolo utenti, questo è quello che sembra, se io Ora fare clic su una struttura di nuova scheda. Quindi questo, per intenderci, è solo il modo di phpMyAdmin di dire la tua tabella di database ha un ID, un nome e un numero con quelle configurazioni particolari e noi ignoreremo il resto dei campi lì per ora. Così ora che cosa voglio fare? Quindi, se vado ora nel mio codice sorgente, se tutto va bene Voglio eseguire la seguente query. Inserire nel, e posso solo dicono gli utenti che non sono strettamente bisogno di chi è rimasto a zecche se è Non una parola pericolosa come utenti. Ho intenzione di dire il nome, numero, e poi qui sono non andare a codificare il cifre dei valori ancora. Ho intenzione di mettere due punti interrogativi. E questa è una convenzione in molte lingue per cui se si vuole avere un segnaposto per una stringa avete intenzione di utilizzare la domanda marchi, per motivi faremo tornare a parlare di sicurezza, e qui Ho intenzione di passare a quelle due campi d'invio Nome, e poi inserire il numero, e ora salvare il file. E ora ho intenzione di vai qui è un super semplicemente dire rendersuccess.php, che sta per essere un altro modello. Ho intenzione di creare veramente veloce. Geditsuccess.php e sto solo andando a dire il successo H1 in quel file. Bene. Così ora, torniamo al del browser, dove ho visitato prima. Andiamo avanti e confermare che ho scritto in David, ho scritto un numero di telefono, registrarsi. Accidenti. Che cosa ho fatto di sbagliato? Così sto vedendo un errore qui, avere un errore nella sintassi SQL. Permettetemi di saltare di nuovo a gedit, permettetemi mi tornare a register.php, e che cosa ho che tralascio era importante l'ultima volta? Ho bisogno di questo. Volete sapere che oltre a avendo notato prima, ma ho bisogno di questo. Così ora torniamo, e questo è stato utile vedere nel browser ed è per questo che in config.php abbiamo sputare errori. Andiamo avanti e ricaricare, fare clic su Continua, il successo. Così ora lasciami andare a casa mia database di qui e fare clic su Utenti, e navigare, e notare ora avere David nel mio database qui. Ora tecnicamente questo sito è non ancora su internet pubblico, quindi non posso avere altro persone a mettere qui, ma se ora volessi, per esempio, inviare io stesso un messaggio di testo. Andiamo su un arto qui e vedere se questo funziona realmente. Ho intenzione di andare avanti e cancellare la riga e noi provvederemo a Blur questo nel successivo video così noi non abbiamo il tutta internet texting me, e noi ora salire al browser e andremo oltre a tenere una conferenza e noi digitiamo in diversi numero qui, registrare, il successo. Così ora, il mio numero è presumibilmente in il database, e ora la parte divertente. Facciamo in realtà utilizzare PHP per fare qualcosa a livello di programmazione, sia dal comando line o da qualche altra parte, e per ora io sono solo intenzione di mantenere le cose semplici e ho intenzione di andare nel mio elenco qui e procedere come segue. Sceneggiatura Gedit diciamo, ce la faremo chiamare il testo, #! / user / bin / env PHP, come abbiamo visto l'ultima volta. PHP. Ora ho intenzione di fare richiedere include config.php, anche se questo potrebbe indurre un leggero errore. E ora ho intenzione di andare avanti e dire righe, di interrogazione, selezione stelle da parte degli utenti, e ora qui ho intenzione di fare una tecnica dall'ultima volta per ogni righe come fila. E ho intenzione di fare qualcosa di semplice. Printf diciamo che il nome è questo, e il numero è questo, backslash n. E ora ho intenzione di passare in fila citare il nome unquote, e il numero di riga tra virgolette, e ora andiamo avanti e finestra il mio terminale chmod a + x questo per rendere questo script eseguibile chiamato testo. E ora corriamo il testo. OK, così progredire. Un così ora ho scritto script della riga di comando, in un linguaggio chiamato PHP, che, a causa di tale richiede la linea, ha accesso a tutti coloro configurazione costanti che ho specificato. Il nome del database e così via. Infatti, tanto per essere chiari che questo non è un colpo di fortuna, lasciami andare avanti e registrare, veramente veloce, qualcun altro come Rob e gli darà il numero 555-1212. E ora, se ho eseguito lo script ancora una volta, notare il potere di quello che stiamo facendo con il database. Ora ho subito visto ciò che il altre due righe sono nel mio database. Così ora cerchiamo di fare qualcosa anche amatore dentro, e questa è la parte che abbiamo non testato in anticipo, così l'ultima volta che ho fatto questo le cose sono andate terribilmente male, abbiamo video in tal senso. A dire il vero, sì, divertente da parte. Così l'ultima volta, in un lezione come due anni fa, abbiamo deciso, ho deciso, di essere tutto questo sarebbe una grande idea per generare dinamicamente e-mail in di classe, utilizzando l'intero database di CS50 studenti, che ci avevano dato i loro numeri e loro vettori cellulare che si potrebbe ricordare da pset0, come alla ragione, si scopre Ho avuto un piccolo bug nel mio programma e ha fatto un paio di errori nel 2012, credo. Per cui, quella che avevo ciclo for che ha fatto esattamente questo genere di cose, iterare su database, ottenere un nome dal database, nome dal database, e poi su ogni iterazione del ciclo che mi ha inviato una e-mail. Ma invece di inviare una e-mail, ho inviata una e-mail prima iterazione, e due e-mail una seconda iterazione, inviati tre email una seconda iterazione, che come si potrebbe ricordare dal nostro la discussione della notazione asintotica questo grande O di male, come n al quadrato è il numero di messaggi che ho inviato, ma non era nemmeno messaggi di posta elettronica era di messaggi di testo. E come sapete, la frequenza non è super high verso la fine del semestre e così ho pensato che sarebbe stato carino a il tempo di dire: "Perché non sei di classe?" Nel testo del messaggio I trasmesso a tutta la classe, ed è stato divertente come 50% del classe, ma l'altro 50%, alcuni dei quali fuori di testa, ho inviato incredibilmente dolci note apologetiche al personale scusandosi per aver perso la lezione appena per questa volta, giusto? In modo che sarebbe terribilmente storto. Quindi, in questo spirito, proviamo questo di nuovo, ma solo con il mio numero. In anticipo, in functions.php, Ho scritto questa funzione qui. Si chiama testo, e prende in tre argomenti. Un numero, un vettore, e un messaggio. Sto utilizzando un'istruzione switch, che meravigliosamente PHP prendere le stringhe, e non solo numeri interi, e non ho attuazione tutto il supporto per questo ancora, Ho appena fatto AT & T e Verizon. Poiché risulta che con questi vettori hanno e-mail ai gateway SMS, per cui si può effettivamente inviare una e-mail a un indirizzo come il numero di telefono a vtext.com e se l'utente non ha bloccato i messaggi, sarà passare attraverso è un messaggio di testo. Ora, per fare questo, ho intenzione di dover aggiungere un campo veramente veloce per il mio database. Ho intenzione di andare in la mia struttura, e sono intenzione di andare avanti e aggiungere un campo alla fine della tabella. Facciamo clic su Go, e io sono andando a chiamare questo vettore e per ora ho intenzione di lasciare questo come un testo di bar, ma possiamo essere più elaborato in futuro. Ho intenzione di andare in fretta nel mio tavolo, e io sono intenzione di sbarazzarsi di Rob, perché è un numero falso, Ho intenzione di andare in modifica qui e sono andando a modificare manualmente la mia carriera essere Verizon, che è, e ora qui. Facciamo un controllo di integrità veloce. Apriamo il nostro script di testo, che assomiglia a questo, vettore è% s. Stiamo facendo molto di più di errore il controllo che ho fatto nel 2012, vettore. E ora, ho intenzione di andare avanti e ri-eseguire lo script. Ok. Carrier è Verizon, il che significa ora spero di fare proprio questo. Correttamente quest'anno, si spera, ci siamo. Quindi all'interno di questo ciclo for, io sono andando ad avere non solo questo printf, Ho anche intenzione di chiamare testo e l'utilizzo di questa funzione di richiamo era ci vuole un numero, un portante, e un messaggio. Vediamo quindi, il numero sta per essere citazione fila unquote "numero" citazione fila unquote "vettore" e l'ultimo è stato messaggio. Non rovinare quest'anno, punto e virgola. Ok. Incrociamo le dita. Vediamo se questo funziona. Va bene, così. Eccoci qui. Cerchiamo di sbloccare il telefono, incrocia le dita, dannazione. Undefined may-- variabili oh aspetta, aspetta, aspetta, veloce reale. In fretta, molto in fretta. Questo è totalmente valsa la pena. Mi permetta di afferrare, mi permetta di afferrare, uh-oh. Grazie, i testi hanno iniziato da qualcun altro. Lasciami andare avanti e apro reale veloce, dropbox.php / mail qui. Standby. Ne vale la pena. Download. OK, fonte src8m. Ok. Hai bisogno di un ulteriore linea qui. Oh, eccolo, è in Frosh IM, è nel registro alle tre. Oh ciao, Margo, grazie mille. OK, e mi mancava questa linea qui. Quindi, mi permetta di prendere rapidamente questa riga di codice, che comprende la posta o libreria che io in realtà voglio usare, Ho intenzione di fretta tornare in funzioni, Ho intenzione di andare in cima di questa file e richiedere il file pure, e ora ho intenzione di attraversare proprio il mio dita quando torno al comando script di linea, che si trova all'interno di directory host locale di oggi. Esegui il testo. Invio. Mail. Standby. Standby. Mail. Oh, OK. Eccoci qui. Posta ottiene nuovo mailer PHP. Ho fatto questo diritto? Accidenti. A-- oh, aspetta, aspetta, aspetta. Stand-by. Te lo prometto, questo è sarà così ne vale la pena. Indirizzo. Questo è il motivo per cui non faccio il Esempi di destra prima classe. Ugh. I seguenti destinatari non è riuscito. Proviamo un'ultima cosa. SMTP impostato da, aggiungere l'indirizzo, l'indirizzo sia effettivamente quello. Proviamo questa ultima parte in indirizzo. Aw, sono davvero triste in questo momento. Grazie. Ma ho davvero apprezzato tutto i testi che hai state inviando. Hai questo David. Stai soffia. Lasciamo lì e fisseremo il Lunedi. Ci vediamo allora. Daven FARNHAM: E ora profonda Pensieri di Daven Farnham. Se un albero binario cade in una foresta e nessuno è in giro a C it-- [ridacchia].