[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 <? =.
In questo caso quello che non c'è bisogno di mettere
il PHP parola dopo il punto di domanda.
Questo è notazione scorciatoia per, ancora una volta, quello che abbiamo appena visto un momento fa
che è eco qualche valore.
>> Vediamo cosa il risultato finale di questo è in realtà.
Lasciatemi passare nel nostro file counter.php,
e vedremo che David appena fatto un errore giocando con il codice lì.
Andiamo fix quello che un casino,
e l'errore sembra essere lì, via, sulla linea 37.
Secondo la parte superiore della pagina che ho visitato questo sito 0 volte.
Bene, andiamo avanti adesso, e nella parte superiore del browser fare clic sul
ricaricare icona, e faccio clic su ricaricare,
e ora ho visitato il sito 1 volta, 2, 3, 4, 5, 6, 7, 8.
E in effetti, se guardiamo il sorgente di questa pagina il codice sorgente attuale sta cambiando,
e notare la completa assenza di qualsiasi PHP, e questo perché
Codice PHP viene valutato o interpretato lato server,
e in modo che significa che l'uscita dello script PHP è ciò che infine inviata al browser,
che in questo caso è un po 'di HTML grezzo e un po' di testo grezzo.
Che cosa sta succedendo qui?
>> Bene, con relativamente poche righe di codice sono in grado di memorizzare
persistente nel corso di diversi secondi, o se aspettato abbastanza,
minuti, anche ore, un valore in un modo che rende HTTP
sembrano stateful come se abbiamo mantenuto
questa connessione al server, ed è anche per ricordare quello che ho detto l'ultima volta,
ma in realtà ci sono un sacco di complessità in corso sotto la cappa
coinvolgendo i cookie che è PHP che permettono di darmi questa illusione
di questo carrello-come funzionalità.
Per ora, un esempio banale in cui siamo solo la memorizzazione di un numero intero,
ma questa funzionalità possa tornare a essere di grande valore
quando si comincia a parlare di progetti più complessi,
tra loro problema posto 7.
Questo è il vostro problema molto ultima volta in CS50.
Lo so, è così triste, ma ciò che troverete è che stiamo andando a concludere
questa parte del semestre da parte effettivamente transizione
dal contesto di C certamente al contesto di PHP
ma durante l'utilizzo di alcuni dei fondamenti stessi
abbiamo parlato per qualche tempo.
>> L'obiettivo con pset 7 è di implementare CS50 Finanza,
che è la propria versione di Yahoo Finance o Google Finance
o anche Etrade.com per cui si ha la possibilità di
guardare in alto i prezzi delle azioni per i simboli di dati, ma anche di più
si ha la possibilità di "comprare" e "vendere" le scorte
che sono negoziati su diverse borse, perché come questa home page
suggerisce qui, che in realtà è la misura in cui abbiamo iniziato
il set problema per voi, avete un form di accesso che sta chiedendo un nome utente e una password.
Ha un pulsante di invio, ma in seguito, come vedremo finalmente vedere,
non c'è nulla di realmente accadendo sotto il cofano ancora perché
resta per voi per implementare la possibilità di registrare nuovi utenti,
la possibilità di acquistare le scorte, di vendere le scorte,
per cercare in realtà i prezzi delle azioni correnti.
>> E infatti, questo sarà come mondo reale possibile perché abbiamo fatto
sono un po 'di codice che vi permetterà con una singola funzione
per interrogare Yahoo Finance, che rende meravigliosamente disponibili i dati sulla
per la ricerca di prezzi delle azioni in base al simbolo di borsa o il simbolo ticker,
e si ottiene indietro il prezzo corrente del titolo del giorno.
I dati in effetti si vede in questo pset particolare sarà
circa come mondo reale come si può ottenere in modo che si sta effettivamente interfacciamento
con le riserve del mondo reale, i prezzi del mondo reale,
e vedremo quanti soldi si può fare, forse
nei giorni successivi di giocare con il vostro set problema proprio.
>> Ma si deve prima preparare il terreno per come progettare qualcosa che è sicuramente più complicato
di counter.php, che è più complicato di tutti gli esempi IM Frosh finora,
e cerchiamo di introdurre un paio di paradigmi qui che ci consentono
sia per pset 7 e forse per il progetto finale se si fa qualcosa basato web
per mantenere il vostro codice ben organizzato, per tenersi sano di mente,
e di fare un passo verso la collaborazione, sia nel progetto finale di CS50
o al di là se si continua a programmare qualcosa in futuro.
C'è questo paradigma di progettazione generale
in informatica e nello sviluppo di software, più in generale
noto come MVC, modello controller della vista,
e questo è un acronimo che descrive sciocco un'idea molto bella,
che è la separazione dei diversi aspetti di un programma,
in particolare mantenendo separata la logica o la logica di business di un sito web
in modo che tutto ciò che comporta cose come
Richiamo di funzioni e interrogazione di banche dati e simili
avviene non tra il codice HTML
ma piuttosto in file separati, e in effetti, c'è questo un file
in genere che hanno chiamato il controllore
questo è davvero la mente dietro l'operazione, e vedremo un esempio
di questo in un momento.
>> C'è un modello che è il codice di programmazione
che fa a parlare ai vostri database, che parla a Yahoo Finance e simili,
e poi c'è la V in MVC, il punto di vista,
tutte le cose che è legato all'estetica, i file che contengono effettivamente
il codice HTML, forse il tuo CSS e simili.
L'idea qui, come suggerisce questa immagine, è che il controllore
è il file, come si vedrà presto e come potrete vedere in particolare pset 7,
che il mondo parla attraverso i loro browser web.
Questo è il file che viene visitato su Internet pubblica,
ma il controller parla potenzialmente di un modello,
che è uno o più altri file che contengono il codice relativo ai dati,
Codice in materia di banche dati e simili, e poi parla
il dispositivo di controllo di uno o più altri file noti come punti di vista,
che sono l'estetica di una pagina web, modelli di sorta,
che potrebbe richiedere alcuni dati come ingresso, ma alla fine della giornata
la logica solo all'interno di una vista dovrebbe essere la resa di tali dati,
l'iterazione di un ciclo ed effettivamente sputando un po 'di
Basato su HTML resa della stessa o anche qualcosa di simile a un PDF.
>> Il bello di MVC è che si può avere diversi punti di vista
sulla base del tipo di dispositivo, in base al tipo di formato di file che effettivamente
desidera mostrare all'utente.
Diamo uno sguardo ad alcuni esempi progressivamente più complessi e ben progettato
partendo prima con la versione 0 qui.
Lasciatemi andare avanti e di aprire nel nostro elenco MVC oggi
un file chiamato index.php nella directory 0.
Si noti che questo è un sito super semplice e molto deludente
che è una sorta di versione 0 di una home page per CS50,
e notare il modo in cui hanno un collegamento a lezioni, abbiamo un link a Syllabus,
e se segui il link con un preavviso di lezioni che l'URL
su cima sta per cambiare per lectures.php.
Se poi segui il link per settimana 1 informa che le modifiche URL per week1.php.
Sembra che ci sia una struttura abbastanza semplice gerarchica qui.
>> Diamo un rapido sguardo sotto il cofano il modo in cui questo è disposto,
e in effetti, se guardo index.php è abbastanza semplice.
In realtà, anche se ho chiamato questo un file PHP non c'è nessun codice di programmazione vero e proprio.
C'è un commento che ho scritto qui in PHP solo modo che l'utente non finisce vederlo.
Naturalmente, come in precedenza, tutto ciò che è in tra i tag PHP
viene interpretato, anche se si tratta di un commento, e per interpretare un commento
significa solo buttare via alla fine della giornata e in realtà non
inviarlo al browser, quindi tutto qui è solo estetica.
Se apro simile lectures.php anche questo è solo un file hardcoded.
Capita di essere chiamati. Php,
ma è davvero solo. html, e week1.php, week2.php
allo stesso modo sono solo markup, quindi c'è un sacco di difetti di questo disegno.
Uno, è una quantità enorme di copia / incolla.
Anche se l'unica cosa che sta cambiando tra questi file è la lista non ordinata,
i tag li, io comunque sono di tipo doc, HTML, testa,
titolo, il corpo chiudere, HTML e altro ancora
in ogni singolo file, il che significa che se mai voluto ristrutturare
questa pagina web o restylize che devo andare e cambiare
tutti questi file manualmente o con un po 'massiccia di ricerca e sostituzione.
>> Facciamo un passo verso un progetto più intelligente, più pensare in versione 1 qui
per cui come da me letto che abbiamo incluso in modo che si può giocare con
questi più tranquilla con preavviso casa che abbiamo qui
un riepilogo dei file nella versione 1 di questo sito,
e sembra che l'ho preso su di me per scomporre
un po 'di codice comune, header.php e footer.php.
Bene, diamo un'occhiata a cosa c'è dentro il primo di questi.
Header.php sembra familiare,
a meno di notare dove viene tagliati fuori?
Subito dopo la linea 19, in modo che tutto ciò che era comune
dal file index.php, lectures.php,
week1 e week2.php dall'esempio precedente.
Quello che ho fatto è stato copia e tutto taglio che era comune a tutti i file,
metterlo in un file di intestazione separata, e similmente nel footer.php
ho applicare lo stesso principio in base al quale le uniche linee interessanti
in footer.php sono questi due, corpo vicino e HTML vicino.
>> Ma ciò che questo significa che è ora nella nuova versione
di preavviso index.php come molto più semplice si può ottenere.
Certo, un po 'più criptica, cercando, un po' meno intuitivo
da seguire verso il basso, ma il mio Dio, tutto che la ridondanza è ormai andato.
Abbiamo bisogno di utilizzare una funzione PHP letteralmente chiamato richiedere fino in alto,
che ricorda molto, ricordo, di C # include il meccanismo.
Abbiamo bisogno di header.php nella parte superiore.
Abbiamo bisogno di footer.php in basso, e l'unica cosa che è diversa
o speciale su questo file è il contenuto che è destinata ad essere unica ad esso.
Se poi vai in, diciamo, lectures.php, lo stesso principio si applica.
Anche in questo caso, alcuni commenti in alto, ma poi ho bisogno di intestazione, piè di pagina richiedono,
e in mezzo è solo il contenuto che è effettivamente cambiato.
E se ci siamo guardati negli Settimana 1 Settimana 2 e ci piacerebbe vedere
che lo stesso principio è stato applicato lì.
Beh, non è ancora finito lì.
>> Diamo uno sguardo alla versione 2, che ha una struttura simile,
a meno di notare ora ho introdotto qualcosa di diverso.
Nella riga 10 ho introdotto helpers.php,
che contiene apparentemente funzioni di supporto.
Una funzione di supporto è generalmente una funzione relativamente breve
che si scrive per aiutarvi in ​​vari luoghi,
e vediamo cosa c'è dentro di helpers.php.
In questo caso, sembra che ha 2 funzioni.
Ricordiamo dal l'altro giorno con il nostro esempio cubo
è possibile definire le proprie funzioni in PHP, e quello che ho fatto ora è che ho
funzioni definite chiamate rendere piè di pagina e rendere intestazione,
il primo dei quali accetta un parametro chiamato dati,
il cui valore predefinito è un array vuoto, come suggerito lì,
e si può effettivamente scrivere questo ancor più brevemente nella sua ultima versione di PHP
dicendo aperta parentesi quadra, chiusa parentesi quadra.
Ciò significa che una matrice vuota di dimensione 0, ma comunque un array.
>> Questa funzione estratto è un po 'speciale in quanto
ciò che fa è che prende come argomento un array associativo
che ha 0 o più coppie di valori chiave, e se si dispone di una chiave di foo
e un valore della barra funzione estratto
crea una situazione in cui ora, come di linea 11,
si dispone di una variabile locale denominata $ pippo il cui valore è il bar.
E se tu avessi più chiavi e valori nella matrice di dati,
allo stesso modo avrebbero dovuto essere estratti in ambito locale
o il nome dello spazio in modo che footer.php e
la stessa idea qui in modo che header.php
hanno accesso a tali variabili.
In effetti, vorrei aprire di nuovo header.php
e attirare l'attenzione ora come si presenta in questa versione.
>> Invece di codificare CS50 come titolo per ogni singola pagina
notare il dinamismo che è possibile ora.
Nella riga 5 Sto facendo eco una variabile titolo,
ma prima sto passando la variabile titolo di una funzione chiamata htmlspecialchars.
Un nome stupido per una funzione, fino a quando lo è, ma lo fa davvero quello che dice.
Si garantisce che tutti i caratteri speciali
nella stringa che è stata approvata nel corretta HTML escape.
Questo è in realtà un modo per evitare qualcosa che si chiama un attacco di cross site scripting
per cui qualcuno può maliziosamente o accidentalmente
iniettare il codice HTML nel tuo sito web
incollando in qualche forma, per esempio,
qualcosa che non si erano abbastanza aspettavamo, in particolare il codice JavaScript,
come ne parleremo in una o due settimane di tempo.
>> Questo header.php ora, è una vista
nel senso che permette di visualizzare il contenuto estetico di alcuni set di dati.
Ma più specificamente, è un modello.
Questa è una sorta di progetto ormai di ciò che vogliamo l'intestazione di ogni pagina a guardare come,
ma c'è un po 'di dinamismo in quanto vogliamo che il titolo da inserire in modo dinamico
basato sulla variabile titolo
che è stato estratto quando abbiamo chiamato, ancora una volta,
il rendering funzione intestazione.
Ora, se abbiamo guardato piè render, c'è in realtà non serve a molto di che in questo momento
perché in footer.php non c'è dinamismo di sorta.
Ci potrebbe essere, ma al momento si tratta di un elenco hardcoded di 2 tag,
ma l'idea stesso vale, in modo che suggerisce realtà perché
abbiamo fatto perdere tempo con un colpo di testa di rendering e una funzione di rendering piè di pagina?
Lasciami andare, invece ora in versione 3,
e nella versione 3 in aiutanti ho deciso di semplificare ancora di più.
>> Vorrei avere una funzione di rendering.
Fammi prendere un altro argomento, questa volta chiamato modello,
che è destinato ad essere il nome di un modello,
e poi io concatenare presuntuosamente. php per valore variabile,
e poi se esiste foo.php, bar.php o header.php e footer.php,
allora ho intenzione di andare avanti ed estrarre i dati variabili
e quindi richiedono quel percorso.
In altre parole, per usare questo ora, se apro index.php
notare che io non chiamo colpo di testa di rendering più.
Mi basta chiamare il rendering, ma passare un valore quotato di intestazione
per chiarire che modello ho effettivamente desidera caricare.
>> Poi qui notare quello che sto facendo.
Sto passando dinamicamente una chiave del titolo,
un valore di CS50, e anche questo, come abbiamo visto prima,
potrebbe essere reso più sintetica nella sua ultima versione di PHP
dove posso sostituire la funzione di matrice con parentesi quadre,
che propongo è ancora più leggibile e certamente
un po 'più facile da digitare.
E, naturalmente, con la chiamata di rendering piè di pagina nella parte inferiore,
non ci preoccupiamo passando un secondo argomento a tutti, senza array associativo,
perché non c'è niente dentro dinamica del piè di pagina.
Sono solo alcuni tag di chiusura per l'HTML.
Bene, ci stiamo prendendo misure necessarie per la pulizia veramente le cose qui,
ma permettetemi di aprire 2 esempi finali.
Questo, il numero 4, si noti che ho fatto una scelta ponderata ora
di migliorare l'esempio precedente e, infine, con un po 'di gerarchia per i miei file.
>> Si noti che in questa sintesi, in questo mi leggi, ho introdotto
comprende una directory e una directory dei modelli
i cui contenuti saranno le cose che desidera includere
ed i modelli che voglio rendere, rispettivamente.
Questo è veramente me essendo anale e cercando di mantenere le cose in ordine,
mantenere i file correlati, ma il risultato finale
è che ora abbiamo una configurazione un po 'più ordinato, ma dobbiamo ricordare oggi
in, per esempio, index.php
quando si richiede il file di helpers.php
dobbiamo ora lo richiedono tramite includes / helpers.php
piuttosto che solo dicendo helpers.php perché ora è in realtà in una sottodirectory.
Ora, per inciso, si vedrà in questi esempi e alcuni altri
funzioni come richiedono, richiedono una volta.
C'è in realtà una funzione si chiamava includono, e tutti hanno un comportamento leggermente diverso.
Qui lo dico una volta bisogno di fare super chiaro che io voglio solo quelle
aiutanti incluso nel mio progetto una volta.
Ma se io sono attento e se sto davvero pensando con la mia logica propriamente
dovrebbe essere sufficiente anche solo per dire richiedere fino all'inizio
finché io stesso non accidentalmente richiedono lo stesso file altrove.
In realtà, questo è un modo leggermente più efficiente di fare quindi utilizzando
richiedono una volta, quindi io lo rintuzzare richiedere solo.
>> Facciamo un passo avanti.
Questo ultimo esempio ora, versione 5, ha una gerarchia di cartelle ancora più pulito.
Notate quello che ho fatto qui per il read me in questa versione finale
ora ho la mia directory HTML, che ho avuto tutto questo tempo,
ma dentro di ora c'è solo index.php, lectures.php,
week1.php e week2.php.
L'elenco include ora vive a fianco della directory HTML,
così allo stesso livello di pari livello, per così dire.
Così fa la cartella dei modelli.
L'asporto chiave qui è che ho introdotto la struttura un po 'di più,
ma la caratteristica fondamentale è che ora solo i file
che devono essere accessibile dal web, accessibile pubblicamente
da un URL su Internet pubblico sono nella mia directory HTML.
>> File Nel frattempo, gli altri, helpers.php, footer.php,
header.php, che sono senza dubbio forse più sensibili,
forse aiutanti in realtà ha alcuni nomi utente e le password o qualche intellettuale
di proprietà di mio, funziona davvero non voglio che il mondo a vedere, anche se accidentalmente.
E 'buona norma tenere fuori dalla directory pubblica HTML
tutti i file che non si devono essere pubbliche.
Tutto quello che dovete fare in questo caso quando si guarda, per esempio,
file index.php nella directory HTML,
notare dobbiamo solo essere un po 'più attenti quando è richiesta
o richiedere una volta questo file.
Ho bisogno di fare prima .. per passare alla directory superiore,
poi fare / includes / helpers.php
tuffarsi indietro per ottenere il file che mi interessa.
>> Tutte le domande poi su MVC
o questa incarnazione relativamente semplice della stessa?
E vorrei mettere in chiaro che ci siamo concentrati un po 'sul
V qui, il punto di vista e il factoring fuori di questi modelli.
Non hai veramente distinto da C M ancora.
In realtà, non c'è davvero nessun M qui, e anche il nostro C,
controller, non è realmente facendo più di tanto, ma si otterrà molto di più
familiarità con entrambe le 2 lettere da MVC,
o meglio, si otterrà molto di più familiarità con il C
in MVC per il set problema 7, quindi non c'è più di quel all'orizzonte.
Domande?
In realtà c'è nessuno qui.
>> Okay, ora passare al secondo argomento e ultima per oggi.
Che è l'introduzione di un database.
Fino a questo punto abbiamo avuto alcuni modi di memorizzazione dei dati.
Abbiamo usato le variabili.
Nel nostro file C, I / O di discussione abbiamo iniziato ad usare i file di testo
e uso dei file come fprintf, e poi abbiamo anche iniziato
parlando di file CSV un po ', Comma Separated Values,
così tutti questi ci ha permesso di avere dati memorizzati
o non-persistente o persistente.
Ma anche CSV non sono veramente favorevoli alla ricerca
e l'inserimento e l'eliminazione.
E 'davvero solo un file di testo stupido separati da virgole
riga per riga per riga per riga, quindi se si desidera
cercare quel file il meglio che puoi fare è davvero ricerca lineare.
Devi iniziare nella parte superiore del file, leggere il tutto in,
e cercare un valore di interesse.
Se si desidera inserire in esso si deve fare la stessa cosa,
iterando su di esso e l'inserimento in un luogo particolare,
e in effetti, quello che devi fare tutta la logica di ricerca di se stessi.
>> Non si può fare modello intelligente di corrispondenza in un file CSV a meno che non ci si scrive il codice.
Non si può fare di filtrazione di un file CSV
a meno che non ci si scrive il codice.
Non sarebbe bello se qualcun altro messo in tutti gli sforzi
per rendere effettivamente la ricerca semplice e facile inserimento
e cancellazione e l'aggiornamento e così via?
Questo è esattamente cosa è un database.
SQL, Structured Query Language, è un altro linguaggio
che stiamo introducendo oggi, ma anche questo è abbastanza accessibile,
e ciò che siamo davvero intenzione di fare è solo strappare fuori di esso alcuni dei più salienti
caratteristiche in modo che per pset 7, e se si fa qualcosa di web basata,
il progetto finale, si ha la possibilità di esprimere se stessi
in termini di query di dati.
Hai la possibilità di memorizzare un po 'o un sacco di dati
in modo molto più strutturato che alla fine della giornata
rendere la vita più facile, perché con SQL puoi esprimerti
più precisamente, molto più metodo per
recuperare un sottoinsieme di dati da un corpus più ampio di dati.
>> Si può pensare a una base di dati, in questo caso, un database SQL, o comunque in Excel
o numeri in cui si tratta di un foglio di calcolo,
o forse più fogli di calcolo, e un foglio di calcolo, naturalmente,
ha righe e colonne, e questo perché
Database SQL sono relazionali, relazionale nel senso
che possono archiviare dati in termini di queste tabelle,
righe e colonne.
Sono più performante di qualcosa di simile a un foglio di calcolo,
e un foglio è destinato ad essere utilizzato da un essere umano.
Un database è destinata ad essere utilizzata da un programmatore
la scrittura di codice contro di essa, così l'incarnazione di una banca dati
sta per essere o riga di comando.
>> Una delle basi di dati relazionali più popolari là fuori è, ancora una volta, MySQL,
che è meravigliosamente libero, prestazioni molto elevate, e questo è ciò che
Facebook utilizzato molto presto e in parte ancora oggi
per memorizzare un sacco di suoi dati, e vedremo tra poco
che utilizzando i comandi relativamente semplici
siamo in grado di selezionare i dati, dati inserire, aggiornare dati,
cancellare i dati e simili, ma per fortuna, non c'è più una interfaccia user-friendly
che solo digitando al prompt in bianco e nero qui.
Useremo per pset 7 e al di là di uno strumento gratuito chiamato phpMyAdmin.
Il nome è casuale.
Lo strumento sembra essere implementato in PHP,
ma questo è fondamentalmente irrilevante.
Cosa c'è di utile su phpMyAdmin è che è un web-based utility.
L'abbiamo pre-installato nella macchina per voi,
e con esso è possibile creare tabelle in un database,
è possibile inserire i dati, cancellare dati, e in generale vedere
i dati in un abbastanza ambiente user-friendly.
Gli utenti non si intende utilizzare phpMyAdmin.
>> Questo è in realtà solo uno strumento di amministrazione o di sviluppatore
con cui vedere e curiosare i dati e capire come strutturarlo,
proprio come ci si potrebbe utilizzare Excel o Numbers,
ma sarà un ottimo modo di visualizzare ciò che accade sotto il cofano
in modo che è possibile concentrarsi sul problema interessante solving e non tanto
sui comandi arcani.
Diamo un'occhiata a un esempio di dati che possono essere memorizzati tabularly
in un database relazionale.
Ecco un esempio.
Ora, purtroppo, phpMyAdmin commesso un errore sul lato della strada gettare troppe parole
e la grafica su di te, ma se affinare in proprio sulla
ID di colonna, la colonna nome utente e la colonna di hash,
questo è effettivamente un foglio di calcolo, ma capita di essere un frammento
di un tavolo all'interno dell'apparecchio
utilizzando un file che mettiamo a vostra disposizione nel set problema 7.
>> In particolare, vi diamo un file che rappresenta
di un utente tavolo, quindi un foglio di lavoro contenente gli utenti con 3 colonne,
uno dei quali è un ID univoco a partire da 1 e viene incrementato successivamente.
La seconda colonna è un nome utente, e quelli di voi che ha fatto Hacker,
l'edizione di Hacker pset 2, potrebbe riconoscere alcuni di questi nomi utente almeno.
Sul lato destro sono le password, ma non sono le password letterali.
Sono hash dello stesso, così si scopre
che memorizzare le password in un database è una pessima idea.
Avete probabilmente letto tutto ad un certo punto di qualche sito
o database di una compagnia di compromessi, e poi si deve
cambiare la password, è necessario per ottenere rimborsi sulle cose
perché un tizio male in realtà ha rotto nel vostro conto in seguito.
>> Memorizzare le password in chiaro, non crittografato in un database
è completamente stupido, ma è molto divertente
poi leggere di alcune aziende molto note
a volte nella stampa le cui banche dati sono compromessi,
e quella parte non è divertente, ma il fatto che le banche dati contengono in chiaro
password è ridicolo perché letteralmente con una riga di codice
è possibile proteggere contro tale minaccia particolare, e questo è quello che abbiamo fatto qui.
Anche per il nostro piccolo falso CS50 versione Finanza
stiamo crittografia password per buona misura, e il fatto che
tutte queste password inizia con $ 1 $ è solo una convenzione.
Questo significa solo che sono criptati o realmente hash,
che è come un senso unico funzione di crittografia
per cui non è possibile invertire i suoi effetti con una cosa chiamata MD5.
>> Il fatto che 50 è dopo che significa che un valore salt
di 50 è stato usato per l'hashing tutte queste password tranne una.
Il mio, naturalmente, come si può vedere qui, HA,
stava usando un sale diverso, quindi quelli di voi che si sono un po 'lo sgambetto
forse in Hacker 2, che avrebbe potuto essere il risultato del nostro aver usato
un hash diverso dagli altri perché la mia password è in realtà la stessa
come un altro utente lassù.
In effetti, se stavate aspettando tutte queste settimane per scoprire
ciò che le password sono state qui erano le password che sono state contestate si
per rompere nell'edizione Hacker del set problema 2, in modo non troppo difficile.
Infatti, Malan era lo stesso jharvard,
ma se andiamo indietro sembravano diverse.
>> Focus su jharvard in cremisi perché erano salati in modo diverso.
L'algoritmo è stato perturbato in modo che la
valore hash, il valore crittografato sembra un po 'diverso
perché gli ingressi sono stati leggermente diversi, ma la password sotto la cappa
era ancora in ultima analisi, cremisi.
Ora, chi se ne frega di questo?
Bene, vi stiamo fornendo con gli utenti di esempio, i nomi dei campioni utente
e gli hash delle loro password, in modo che in realtà un po '
clienti per CS50 Finanza la prima volta scendere a terra con il codice.
Dovrete implementare più tavoli all'interno di MySQL, all'interno del database.
Dovrete creare più fogli di calcolo, in modo efficace, ma abbiamo deciso di darvi questo
per iniziare, e vedrete che il problema disciplinare set
ti guida attraverso il processo di importazione di questa tabella
e anche spiegare ciò che alcune delle caratteristiche sono,
e potrai anche vedere che vi mettiamo a disposizione il codice
per gestire l'hashing o la crittografia di queste password,
quindi non c'è bisogno di preoccuparsi troppo di quello che MD5 o simili è in realtà tutto.
>> Quindi, SQL, Structured Query Language.
Questo è, molto semplicemente, la lingua che sta per iniziare a utilizzare in pset 7
e, forse, oltre a richiedere i dati da alcuni database.
I dati sono, ancora una volta, memorizzato tabularly in queste tabelle relazionali, colonne e righe,
ma con un po 'di sintassi relativamente semplice come eliminazione,
inserire, aggiornare e selezionare possiamo fare esattamente questo.
Siamo in grado di eliminare dal database, inserire,
aggiornare i dati, così come selezionare, cioè, recuperare i dati dal database.
Come possiamo fare per fare questo?
Lasciami andare avanti all'interno dell'apparecchio.
Vorrei tirare su http://localhost,
che, di nuovo, è l'apparecchio stesso locale.
Questo è il suo soprannome predefinito.
E lasciami andare / phpmyadmin.
Questo sembra essere un URL speciale che l 'apparecchio è preconfigurato per capire
che richiede subito per me un nome utente e una password.
>> Come al solito, ho intenzione di scrivere jharvard e cremisi,
ma si rendono conto che è l'account di amministratore del computer.
E 'solo una coincidenza che c'è anche una jharvard registrato per CS50 Finanza.
Jharvard, cremisi, enter mi dà l'interfaccia utente che abbiamo visto
un assaggio di un momento fa, ed è un po 'opprimente in un primo momento,
ma vi assicuro, non si è mai costretta a fare clic su la maggior parte dei link in questo strumento.
Vi ritroverete con un piccolo sottoinsieme che sono super disponibile,
il primo dei quali è qui database.
Se vado con le banche dati, si noti che sto viene richiesto di creare un database.
Questo è come la creazione di un nuovo file di Excel, in modo efficace.
Ho intenzione di andare avanti e chiamare questa conferenza, e sto solo andando a ignorare il campo lì, regole di confronto.
Ha a che fare con la rappresentazione dei dati in esso,
e ho intenzione di fare clic su creare, e ora notare come ho lasciato andare di creare
sulla sinistra dove dice nessun database
Mi dovrebbe presto vedere il database lezione.
>> Se ora cliccate sulla sinistra, il database di lezione,
notare le mie schede cambiare un po '.
Ho struttura, SQL, l'esportazione, l'importazione e alcune altre cose.
La struttura è praticamente vuoto.
Non ci sono tabelle nel database trovato, come si dice qui,
quindi cerchiamo di creare una tabella, e andiamo avanti e creare una tabella
come studenti, e quante colonne vogliamo?
Record di Teniamoci questo semplice, e sia per tutti gli studenti
un numero di identificazione, un nome e un indirizzo email.
>> Terremo è semplice come quella, così 3 colonne, andare.
Il modulo che vedete qui ora è un po 'disordinato e travolgente,
ma non ci resta che passare attraverso di essa riga per riga, in modo molto velocemente diamo
la prima colonna in questo database il nome di ID per l'identificatore univoco.
Sarà un numero intero. Posso realmente ignorare lunghezza e valori.
Un int sta per essere a 32 bit, non importa ciò che si digita in là, quindi cerchiamo di lasciare il campo vuoto.
Il valore di default, che potrebbe rendere nullo, come definito.
Ho intenzione di lasciare che da sola. Cerchiamo di non preoccuparsi di valori predefiniti.
Facciamo scorrere qui a destra, attributi.
Questo è interessante.
Andiamo avanti e un po 'arbitrario dire che gli ID devono essere senza segno.
Cerchiamo di non perdere tutti i numeri negativi.
>> Andiamo 0-4000000000, prendere o lasciare,
e poi cerchiamo di non toccare uno di questi campi appena ancora là,
ma poi fammi digitare nome quaggiù,
e poi l'altra era posta, in modo che il fermo è posta
e il nome, ovviamente, non interi, quindi cerchiamo di cambiare per un campo diverso.
Si scopre varchar, lunghezza variabile char,
è come una stringa in un database SQL
ma di lunghezza variabile, e che in realtà hanno a segnalare in anticipo la
lunghezza massima della stringa, quindi ho intenzione di un po 'arbitrariamente
per tipo di convenzione 255 caratteri.
Potrei dire tutto 32. Potrei dire 1.000.
Si tipo di necessità di decidere per se stessi, sulla base di dati demografici ciò che è
la più lunga studente nome e andare con quel numero o un po 'più grande,
ma ciò che è bello di un varchar è che non sta andando a perdere
255 byte sul nome di ogni studente.
Se è DAVID non è intenzione di utilizzare un intero 255 byte,
ma questo è un limite superiore, quindi vado con 255 solo per convenzione,
ma potremmo discutere che, per essere un po 'di valore inferiore, e per l'indirizzo e-mail
tanto per essere coerenti 255, ma ancora una volta, potremmo avere lo stesso dibattito.
Ma ho intenzione di fare una cosa qui sulla destra.
>> Cosa c'è di potente su un database è che può fare un sacco di sollevamento di carichi pesanti
o complesso lavoro per voi.
In particolare, davvero non mi importa quali numeri ID miei studenti sono.
E 'solo vuole essere un identificatore univoco in un database
quindi ho una rappresentazione a 32 bit succinta di quello studente
in modo da avere un modo per identificare in modo univoco le
affinché non vi sia Davids 2, per esempio, in una classe.
In effetti, ho intenzione di selezionare questa casella AI, incremento automatico,
in modo che il database, MySQL, capisce
ciò che ogni studente ID appena inserito sarà.
Non hanno nemmeno bisogno di preoccuparsi che nel mio codice,
e sto anche andando a scegliere qualcosa sotto il menu indice.
L'indice a tendina qui è primario, unico nel suo genere,
indice e testo completo.
Si può forse immaginare quello che un paio di queste cose sono,
ma si scopre in database relazionali
che il programmatore o l'amministratore del database raggiungere preventivamente
dare suggerimenti al database come a ciò che i campi
in una tabella sono un po 'speciale.
>> Per esempio, in questo caso ho intenzione di dire che ID
sarà un indice primario, altrimenti noto come chiave primaria.
Che cosa questo significa, per definizione, è che d'ora in poi ID
si identificano in modo univoco gli studenti in questa tabella.
Nessuno studente avrà lo stesso ID, perché sto imporre questo vincolo o questo indice.
Inoltre, ciò che questo sta per fare per me è sta andando a raccontare
MySQL che l'ID è speciale.
Mi interessa in particolare su ID, in modo da andare avanti e fare la magia la struttura dei dati di fantasia,
costruire una specie di albero.
In genere si tratta di qualcosa che si chiama B-tree, che non abbiamo guardare alle settimane fa,
ma è un'altra struttura di dati, ad esempio simile nello spirito agli alberi binari
e prova che abbiamo guardato, ma sta andando a dire
al database di questo campo è così importante che probabilmente
Voglio essere in grado di cercare su di esso, andare avanti e costruire un po 'di fantasia
struttura di dati in memoria per velocizzare le ricerche in modo che idealmente
sono costante di tempo o almeno il più vicino possibile a quello
in modo che non devolvere in ricerca lineare, che non sarà
le più elevate prestazioni approccio.
Al contrario, indirizzo e-mail potrebbe essere una chiave primaria.
>> In teoria, l'indirizzo email di ognuno è unico nel suo genere, a meno che non stai condividendo un po 'di conto,
ma non è generalmente buona per usare qualcosa come una stringa
come chiave primaria, perché se il suo scopo nella vita è quello di identificare in modo univoco
righe della tabella non c'è motivo di usare al massimo 255 byte
per identificare in modo univoco a qualcuno se si riesce a cavarsela con soli 4 byte
oppure a 32 bit int.
In generale, una chiave primaria deve essere breve e concisa
e, idealmente, qualcosa come un intero o un int grande, che risulta essere di 64 bit.
Ma un indirizzo email dovrebbe essere unico, e una delle caratteristiche di un database troppo
è quello di far rispettare l'unicità per me.
Selezionando unico qui accanto a e-mail, anche se stessa e-mail
viene fatto scorrere fuori dallo schermo, sto dicendo al database
non mi fido.
Non vorrei inserire nel database
l'indirizzo e-mail due volte lo stesso, anche se sono un idiota e non sono
molto buona con i miei se e se e penale e il codice PHP reale
e ho accidentalmente consentire all'utente di registrarsi con un indirizzo email esistente
il database è ancora un altro livello di difesa per correttezza
per garantire che l'indirizzo e-mail duplicati non finisca nella tabella.
>> Ora, invece, il nome probabilmente non si vuole fare questo unico
perché allora non potrà mai essere di 2 o 2 Davids Smiths Mike, per esempio,
nel database, in modo che uno ci lasciare soli.
Ho intenzione di andare avanti e fare clic su Salva in basso a destra,
e tutto sembra buono, a meno di notare qui
questa è una parte che per ora non ci spendere troppo tempo su
perché la sintassi è un po 'complessa, e non c'è bisogno di creare tabelle
tutto ciò che spesso, ma SQL è di per sé un linguaggio,
la sintassi per il quale è proprio qui che ho evidenziato.
Che cosa fa veramente phpMyAdmin è crea un web-based GUI per voi
con il quale è possibile risparmiare tempo e non dover digitare manualmente le
una query SQL abbastanza lungo così.
>> In altre parole, se si voleva creare manualmente questa tabella,
sia a che phpMyAdmin in bianco e nero o anche in pronta
utilizzando questa scheda altro, questa scheda SQL in cui è possibile digitare qualsiasi query SQL
si vuole, francamente, questo mi avrebbe preso un minuto
da ricordare in realtà la sintassi intero, e anche allora probabilmente sarebbe
fatto alcuni errori di battitura, quindi questo strumento è utile per cose del genere, ed è anche istruttivo.
È possibile iniziare a dedurre ciò che la sintassi è
solo per il bel colore di codifica che phpMyAdmin è l'aggiunta di
per nostra comodità visiva.
Ma ora facciamo questo, invece.
Lasciatemi andare alla scheda di inserimento in alto, e lasciami andare avanti e inserire, per esempio
un ID, diciamo, in realtà non mi interessa.
E 'intenzione di incremento automatico. Ho intenzione di lasciare che l'affare database con questo.
Ma io sono Davide, e la mia e-mail dovrebbe essere malan@harvard.edu.
>> Andiamo avanti qui e messo in Mike Smith come un altro.
Io mi do un cognome così,
e avremo essere lui smith@example.com,
e poi dove devo andare dopo?
Beh, sembra che andare è il pulsante per scegliere, e voilà.
Notate gli ultimi 2 righe inserite.
Questa è la query SQL effettivo.
Questo è lo strumento phpMyAdmin eseguito per me,
ma il risultato finale, avviso, se io ora andare alla scheda Sfoglia,
è quello di vedere 2 righe in questa tabella, che ricorda molto esteticamente
della tabella abbiamo visto in precedenza per i nostri utenti da pset 7,
uno dei quali è David Malan, uno dei quali è ora Mike Smith.
Ma tanto per essere chiari, non ho bisogno di usare phpMyAdmin,
e in effetti, si sta andando ad essere presto la scrittura di codice per pset 7
che automatizza il processo di aggiunta di righe, l'eliminazione di righe, aggiornano le righe e simili,
per cui vorrei invece andare alla scheda SQL qui
e digitare select * from dove gli studenti
email "malan@harvard.edu." =
>> In altre parole, supponiamo ora di avere
qualche forma HTML, e l'utente digita il proprio indirizzo e-mail, tra gli altri settori,
e l'obiettivo è ora in PHP sul codice back-end
per cercare in realtà fino altri dettagli che dell'utente.
Qual è il tuo nome completo? Qual è il tuo numero ID?
Si potrebbe scrivere una query SQL come questo, selezionare * da parte degli studenti
dove email "malan@harvard.edu." =
E se poi clicca su OK, si noti che io, e in effetti io, tornare solo una riga.
Mike è omesso da questo gruppo di risultati, come l'insieme delle righe
viene generalmente chiamato, perché non hanno lo stesso indirizzo e-mail come me.
>> Ora, di nuovo, qui per pset 7 userete phpMyAdmin come strumento di amministrazione
e uno strumento pedagogico per imparare la tua strada
nel mondo di SQL, ma alla fine della giornata
hai intenzione di scrivere queste query all'interno di effettiva codice PHP,
e quindi rimanete sintonizzati in procedura dettagliata Zamyla in particolare
dove potrete fare un tour del codice di distribuzione per questo set problema
in cui vi abbiamo dato non solo l'estetica della pagina di accesso
e il bel logo sexy che dice CS50 Finanza, ma abbiamo anche dato
un gruppo di funzioni che renderanno la vita un po 'più facile.
Abbiamo anche scritto parte del pset per voi,
la parte di login di esso, in particolare, per dare un senso di un disegno rappresentante
che effettivamente utilizza un controllore, per esempio, index.php,
login.php e simili, e poi vedrete il pset ha anche una directory dei modelli
che ha tutte le vostre opinioni, tutti l'estetica.
E così i flussi di lavoro in pset 7 è sarà che
gli utenti visita un controller tramite un URL in un browser.
Questo controller contiene codice PHP che hai scritto, e all'interno del codice PHP
potrebbero essere alcune linee di SQL nidificato tra doppi apici
e passato a una funzione che abbiamo scritto query denominato
che vi aiuterà a parlare con il database senza utilizzare qualcosa di simile
uno strumento di amministrazione come phpMyAdmin.
>> Sarete in grado di scrivere istruzioni SQL in codice PHP
e tornare un array PHP del set di risultati,
delle righe che in realtà corrispondono a quella query.
E allo stesso modo si sarà in grado di eseguire inserimenti o eliminazioni
o aggiornamenti o simili, la sintassi per il quale è abbastanza simile,
e vedrete da alcuni riferimenti on-line, a partire dal codice di distribuzione
e dal pset pacco stesso esattamente come fare per farlo.
Realizzare in ultima analisi, siamo davvero solo grattando la superficie di SQL
e di MySQL, ma il potere di esso è davvero che ti libera
mettere a fuoco i problemi che si vogliono risolvere, i casi d'uso che si desidera implementare
senza doversi preoccupare abbastanza tanto, almeno nella fase iniziale,
su dove e come memorizzare e ricercare il database,
e questo è letteralmente in cui Facebook si è avuto il suo inizio
utilizzando MySQL e quindi utilizzando più server MySQL e quindi più server MySQL
in poco tempo fino a che non doveva poi iniziare a pensare davvero difficile su come
memorizzare dati, come memorizzare le cose ancora più efficiente,
quindi, anche se ci diamo per scontato il fatto che gli indici ei vincoli univoci
e così via, solo di lavoro c'è una conversazione molto interessante
che tutto questo può condurre a, in modo da rendersi conto che siamo solo di graffiare la superficie
di ciò che potrebbe alla fine per voi oi vostri progetti diventano un po 'di dati di grandi dimensioni.
>> Detto questo, cerchiamo di finire qui, e ci vediamo la prossima settimana.
[CS50.TV]