[Powered by Google Translate] [Settimana 8, continua] [David J. Malan] [Harvard University] [Questo è CS50.] [CS50.TV] Questo è CS50, quindi questo è il fine della Settimana 8 qui. Noi, naturalmente, aveva un po 'un uragano all'inizio di questa settimana, quindi in questo momento è davvero solo io e te in questa aula, ma oggi continuiamo la nostra conversazione su PHP e di programmazione web più in generale, e abbiamo anche introdurre l'idea di basi di dati, in particolare uno chiamato MySQL, che è molto popolare in questi giorni, in gran parte a causa della sua scalabilità, nonché per il suo essere libero e open source. Ma in primo luogo, uno sguardo a dove avevamo lasciato l'ultima volta. Ricordiamo che stavamo guardando le diverse Frosh esempi istantanei, e questa era la forma orrenda che sono arrivato fino a circa 15 anni fa + in modo che gli studenti sul registro campus per lo sport matricola intramurali senza avere a trekking più attraverso il cortile di Wigglesworth far scorrere un pezzo di carta contenuto sotto porta un po 'di sorvegliante. Invece abbiamo spostato tutto in linea, ma per farlo abbiamo bisogno di fare uso di alcune tecnologie, così si, avevamo bisogno di HTML, HyperText Markup Language, che è ancora una volta il linguaggio di markup con cui si fanno le pagine web strutturalmente. Usando un po 'di CSS in questi giorni, fogli di stile CSS, per cui usiamo stilizzazioni della pagina Web utilizzando una sintassi leggermente diversa, considerando che l'HTML è stato tutto sulla struttura stessa. Abbiamo anche bisogno di introdurre un linguaggio di programmazione web. In questo caso, useremo PHP, e PHP sta per permetterci al contenuto di uscita in modo dinamico e fare le cose di programmazione come l'invio di e-mail, come è avvenuto sulla nota abbiamo lasciato la scorsa settimana. Ricordiamo che il codice per questo è in due parti. Uno, abbiamo avuto froshims3.php, e questo era in gran parte di markup con un modulo HTML all'interno di esso, un po 'di CSS qui negli attributi di stile in modo che il modulo stesso sarà centrato sulla pagina, ma oltre a questo abbiamo avuto qualche input di form rappresentativi, un campo di testo, una casella di controllo, alcune radio pulsanti, menù a scelta, e un pulsante submit. E tramite questo modulo, abbiamo presentato in un file che è stato apparentemente chiamato register3.php, che a sua volta sembrava un po 'di qualcosa come questo. Ora, la maggior parte del codice in register3.php, richiamo, è stato tutto di e-mail. Ha fatto un po 'di validazione della forma che è stata presentata per assicurarsi che i campi erano in realtà a condizione che ci si aspettava. Poi abbiamo chiamato alcune funzioni PHP utilizzando un po 'nuova sintassi, anche se è preso in prestito da C. Questo operatore freccia ci permette di fare uso di qualcosa che si chiama programmazione orientata agli oggetti. Non andrà in che, in ogni dettaglio in questa sede, ma sappiamo per ora è un modo di avere le funzioni associate agli oggetti, che sono un tipo speciale di struttura, come abbiamo visto in C. Ma per ora, basta prendere sulla fede che questa è la sintassi corretta da utilizzare quando si utilizza una libreria come questa libreria PHPMailer. E poi alla fine di questo file abbiamo generato dinamicamente una email che ha inviato al mio account jharvard@cs50.net dal mio account jharvard@cs50.net, e abbiamo informato l'utente di conseguenza che era stato registrato per questo sport. Questo è più o meno quello che il sito Frosh IM ha fatto tanti anni fa quando l'ho implementato, ha concesso, in una lingua diversa, ma vi mostra forse il potere che si ha ora che ci si può esprimere non solo di programmazione ad un livello basso in un linguaggio come C, ma ad un livello molto più elevato con queste applicazioni reali del mondo come e-mail per risolvere effettivamente alcuni problemi del mondo reale. Ora, naturalmente, anche se io uso questo script per generare un po 'di messaggi di posta elettronica in modo dinamico da jharvard@cs50.net, che è in effetti un conto che hanno accesso a, non essere molto attenti a inviare posta solo da account che sono in realtà il proprio, perché le cose che si ottiene in un po 'di acqua calda nella vita. Detto questo, andiamo ora transizione per risolvere un problema del tutto diverso, che di stati di fissaggio. Ora, che cosa significa questo in realtà significa? HTTP, questo Hypertext Transfer Protocol, è in realtà un protocollo stateless, e che cosa questo significa è che quando si tira qualcosa come Google.com e poi premere invio di solito il tuo browser ha un qualche tipo di icona che poi la filatura traduce in una certa pagina web, in fase di download, e poi quella piccola icona smette di girare, e che suggerisce in effetti HTTP che ha portato a termine un qualche tipo di connessione al server e questo è tutto. HTTP è stateless ', nel senso che non mantiene una connessione permanente al server Skype stesso modo fa o Gchat fa perché con HTTP il presupposto è che una volta che hai recuperato una pagina web che sia. Ora, in realtà, in questi giorni su siti come Facebook e Google Maps e Twitter e simili c'è dinamismo molto di più in base al quale anche dopo che l'icona smette di girare si può infatti ottenere ulteriori aggiornamenti dal server, più tweet, gli aggiornamenti di stato più su Facebook e simili. Ma anche che utilizza una tecnica che ne parleremo in una settimana o due conosciuta come Ajax utilizzando un linguaggio chiamato JavaScript, ma alla fine della giornata, è ancora stateless HTTP. Eppure, se si vuole ricordare in qualche modo cose su un utente anche dopo aver scollegato dal server PHP fa regalare un mezzo di fare questo perché, come abbiamo visto l'ultima volta, PHP ha una serie di superglobals, e un superglobale è, di nuovo, una variabile globale speciale che è consegnato a voi dal server web e in PHP. Non devi fare nulla per mettere i valori in essa, e tra i superglobals che abbiamo visto finora sono GET e POST, che è dove i campi modulo vengono messi automaticamente per voi, così come un paio di altri che non abbiamo ancora visto. All'interno di $ _SERVER sono alcune variabili speciali previste per il server stesso. Qual è l'indirizzo IP, quale protocollo, HTTP o HTTPS ha utilizzato, che metodo hai usato richiesta e simili, quindi c'è un po 'di interessante, dettagli piccanti sul server, e di fatto, l'utente in là pure. Ci sono $ _COOKIE, che è dove queste cose cd cookies vengono memorizzati. Non perdere tempo sui cookie stessi oggi, ma sappiamo per ora che un cookie è solo un piccolo pezzo di informazioni che un server web può piantare su un browser web ed a sua volta delle RAM o disco rigido il suo computer per memorizzare informazioni su un utente, per esempio, il loro nome utente in modo da non doverla digitare ogni volta che il login o qualche numero unico o identificatore per l'utente in modo che non c'è bisogno di importunare con lo stesso tipo di domande su Preferenze in futuro, ma la maggior parte di interesse in questo momento è di $ _SESSION. Questo superglobale, che, come gli altri, è consegnato a voi automaticamente da PHP quando si sta scrivendo siti Web basati su PHP in grado di memorizzare tutto quello che vuoi, stringhe, interi, virgola mobile, valori, array, oggetti, davvero tutto ciò che si desidera, e permette di memorizzare in modo che, anche se l'utente che si visita di tanto in tanto torna un minuto da ora o 5 minuti da ora, perché prendono il loro tempo prima di cliccare su qualche altro link PHP farà in modo che tutto ciò che si mette in quella sessione superglobale minuti o 5 minuti fa, sarà ancora lì quando l'utente ritorna. E sotto il cofano di questa superglobale è implementata per mezzo di quelle cose cd cookies, ma per ora, è solo un'astrazione per cui è una sorta di equivalente programmatico di un carrello della spesa. Qualunque cosa, il programmatore, messo in quella superglobale array associativo ci sarà un certo numero di minuti più tardi finché non viene eliminato o fino a quando l'utente chiude proprio browser del tutto. Diamo un'occhiata a un esempio di come questa cosa viene effettivamente utilizzato. In counter.php tra i pezzi di oggi di codice abbiamo la seguente riga. All'inizio di questo file abbiamo un sacco di commenti blu, che sono poco interessanti, per ora. Ma in linea 13 si ha una nuova linea, session_start, e che in realtà è esattamente quello che dice. Si inizia sessioni. Vi permette di usare quel grande superglobale $ _SESSION, ed è così semplice come sembra. Ora, se si procede a guardare la linea 16, cerchiamo di capire che cosa questa pagina web sta per fare. If (isset ($ _SESSION ["contatore"]), poi andare avanti e memorizzare nella variabile contatore, contatore minuscolo, $ _SESSION ["Contatore"]. Questo sembra essere dichiarazione di una variabile locale chiamata contatore all'interno del quale è mettendo una copia di ciò che è all'interno del superglobale chiamato session nella posizione "contro". Altrimenti, a quanto pare, questo piccolo contatore variabile locale, viene inizializzata a 0. Ma poi poche righe più tardi nel 26 avviso che la copia della sessione del contatore, la sua chiave, sia assegnato un nuovo valore, che è il suo valore corrente più 1. In breve, questo file sembra essere l'aggiornamento un contatore che viene memorizzato all'interno del superglobale sessione incrementando entro 1, ma conserva una prima copia del valore precedente memorizzando in una variabile locale chiamata $ contatore, e poi qui vediamo cosa rimane. Si scopre che è praticamente solo HTML. Nella parte inferiore di questa pagina vediamo in linea 37 che ho visitato questo sito numero del contatore di volte, quindi ci sono un paio di caratteristiche interessanti qui. Uno, questo è chiaramente una variabile, ma non è sufficiente per mettere solo $ Contatore nel corpo del codice HTML perché naturalmente se è solo in mezzo a PHP HTML sta per scontato che è solo HTML. Si vuole letteralmente $ contatore da stampare sullo schermo. Ma invece di cadere in modalità PHP con questo pezzo di sintassi si può inserire dinamicamente un valore qui molto simile nello spirito a quello che abbiamo fatto l'ultima volta con l'inserimento di valori in stringhe. In realtà, questa è solo una notazione abbreviata per dire una cosa del genere, letteralmente, print ($ contatore) o anche qualcosa di simile a printf (% s, contatore), o addirittura, come si può avere visto on-line o nei libri di testo, c'è una funzione in PHP chiamato eco che fa la stessa cosa, e tutti questi sono solo modi più avvolte di dire