[Powered by Google Translate] [Soluzione Problema Set 7] [Zamyla Chan] [Harvard University] [Questo è CS50] [CS50.TV] Ciao a tutti, e benvenuti a Walkthrough 7, CS50 Finanza. Ora siamo ufficialmente fatto con tutti i pset in CS50, e siamo appena lasciato con un altro che sta per essere una implementazione divertente di un sito web in cui gli utenti possono accedere a CS50 Finanza e comprare e vendere azioni. Oggi, stiamo andando ad avere un paio di strumenti a nostra disposizione. Stiamo per parlare di autorizzazioni. Ogni volta che si dispone di una cartella web, si sta andando a voler consentire agli utenti di eseguire alcuni file ma anche appena letto gli altri, quindi dovremo esaminare i permessi e come impostare quelli. Quindi stiamo andando a guardare in PHP, HTML e il codice SQL. In primo luogo, le autorizzazioni. Quando sei nel terminale in una determinata directory, allora ciò che si vuole fare è che si desidera eseguire il comando chmod. Questo è seguito da lettere o numeri corrispondente a quello che, fondamentalmente, che il mondo a vedere, ti a vedere, ecc Ad esempio, ogni volta che si dispone di una cartella, poi si vuole quella cartella essere eseguibile da tutti che lo vede, così quello che si potrebbe fare è è possibile eseguire il comando chmod a + x e poi il nome della cartella. Quando si dispone di un file, ad esempio file CSS o file immagine - come JPEG e bitmap, cose del genere, o altri codici JavaScript - si vuole che per essere leggibile da tutti, Allora quello che fai è è possibile utilizzare il carattere jolly - che è un asterisco - per indicare fondamentalmente nella cartella CSS - tutto in quella cartella -  Io vado a dire che che sta per essere leggibile da tutti. Con le autorizzazioni, quando usiamo le lettere, possiamo anche usare numeri al posto. Quindi, vedete che alla fine quando si desidera qualcosa in eseguibile - che è rappresentata dal numero 1 - qualcosa che deve essere leggibile è il numero 4 e poi - scrivibile è il numero 2 - e quindi in sostanza quando si vuole una combinazione di questi, poi vengono aggiunti. Se volete qualcosa di essere leggibile, scrivibile ed eseguibile, allora si dovrebbe aggiungere fino 4, 2, e 1 e che vuoi dare a 7, allora ogni volta che si dispone di una cartella che si desidera che, per essere eseguibile da tutti - così come di lettura e scrittura - poi fai che il 7, 1, 1. Sarebbe 7 per voi, quindi 1 per le altre persone. Quando hai le specifiche, sarà in realtà specificare quali cartelle e quali file devono essere chmod-ed in particolare. Per esempio, quando si dispone di cartelle - questi sono 7-1-1 - quando si hanno immagini o HTML, CSS, JavaScript, poi quelli stanno per essere 6, 0, 4 - o 6, 4, 4 - e poi i file PHP saranno 6, 0, 0. L'idea alla base è che gli utenti non dovrebbero effettivamente vedere il codice PHP, ma solo essere in grado di vedere l'output. Fantastico! Spostamento in PHP. Semplicemente, ogni volta che si desidera un file PHP, il suffisso del file è. Php. È inoltre possibile combinare HTML con codice PHP. Se si dispone di un file HTML, per esempio, allora si può racchiudere con l'angolo a sinistra, punto interrogativo, php - inserire il codice php - e chiudere che con un altro punto interrogativo e di un angolo retto. Le variabili in PHP sono molto più facili da gestire rispetto alle variabili in C. Qualsiasi variabile inizia proprio con il simbolo del dollaro di fronte ad essa, e sono debolmente tipizzato. Ciò significa che non c'è bisogno di preoccuparsi di impostare qualcosa uguale a una stringa o un numero intero. Si può semplicemente dire, questo è il mio nome della variabile e allora questo è il suo valore, in modo che sarà più facile da affrontare lì. Un'altra cosa è che PHP permette di utilizzare gli array associativi. Si può semplicemente definire un array, come si farebbe in C dicendo, segno del dollaro-il nome del tuo array è uguale, e poi in parentesi quadre hanno fondamentalmente solo l'elenco dei valori di tutti gli elementi della matrice. Ma, in PHP quello che si può anche fare è specificare sostanzialmente - è un po 'come una funzione di hash. È possibile specificare l'indice - che cosa avete intenzione di chiamarlo - e che corrisponde ad un valore. Se effettivamente passare a = 1, b = 2, c = 3, poi l'array a un indice vuoi dare a 1. Questo pset vi riscalderà con un po 'di PHP in una sezione di domande, e poi tuffarsi in CS50 Finanza. Abbiamo un paio di - abbiamo alcune funzionalità, in fondo, di attuare in questo sito. Vogliamo consentire agli utenti di registrarsi nel nostro sito web con un nome utente e una password. Vogliamo permettere loro di cercare un preventivo, e poi ci sarebbe stampare il nome di tale offerta e il prezzo attuale che è a. Vogliamo permettere loro di vedere un portafoglio di tutte le azioni che hanno acquistato finora. Vogliamo anche per consentire loro di acquistare azioni e li vendono. E poi finalmente, vogliamo permettere loro di vedere la storia di tutte le operazioni che hanno fatto. Poi, finalmente, dopo aver realizzato tutto questo, poi sei libero di implementare una caratteristica in più. Andremo in quelle. Questi possono essere sia consentendo agli utenti di ottenere denaro extra mediante il deposito di denaro extra, o si potrebbe consentire loro di modificare la propria password, o qualcosa del genere, mandarle via email una ricevuta quando acquistare o vendere un titolo. C'è un elenco limitato di caratteristiche che è possibile farsi realizzare, quindi questo è l'ultimo lì. Poiché si tratta di un sito web, voi ragazzi hanno anche un sacco di libertà per personalizzarlo. Facciamo fornire po 'di codice CSS, ma tu sei sicuramente libero di modificarlo, farlo sembrare più bello, ma alla base si tratta di una funzionalità di base in modo da fare sempre riferimento alle specifiche di quello che hai veramente bisogno di includere lì. In seguito le specifiche, abbiamo intenzione di utilizzare l'apparecchio come un server. E 'intenzione di ospitare il nostro sito web per noi, sul proprio server locale. Se si seguono queste istruzioni e decomprimere il codice pset 7 Distribuzione nel vostro host virtuale / cartella locale di accoglienza,  allora si può solo visitare http://localhost/ in Google Chrome all'interno dell'apparecchio, e quindi si raggiungerebbe il codice in cui hai scritto pset 7. Pset 7 viene fornito con un mucchio di codice di distribuzione, e si spera we've - attraverso tutti i pset prima di questo - ci ha abituati a leggere tramite il codice di distribuzione, capire quali funzioni sono già previste, e di come potremmo essere in grado di utilizzare questi e le altre funzioni che stiamo andando a essere di applicazione. In questo caso, ci sono 3 cartelle. Abbiamo una cartella HTML, include una cartella e una cartella dei modelli. Quello che stiamo andando a fare con questo pset è una specie di separare il pensiero - il pensiero di programmazione - del codice PHP con l'attuale aspetto visivo. Avremo un file PHP che fa tutto il pensiero, si legge nel database, stampa le cose, è se le dichiarazioni - cose del genere - e poi che ti passare i dati nel nostro file di modello - o file template.php. Quello che voglio fare è leggere i dati e poi lo stampa. Siamo in grado di trattare i modelli come "muto", in quanto in realtà non li vogliono di fare un sacco di lavoro nel calcolo le cose. Vogliamo che i nostri controller per farlo. Un po 'su questo - diamo uno sguardo ad alcune del codice di distribuzione. Qui abbiamo il nostro file index.html, ed è quasi vuoto. In sostanza ciò che fa - dice, bene, ho intenzione di richiedere il file configuration.php. Noi non vediamo che proprio lì, ma è fondamentalmente chiamando il file configuration.php, ed eseguire tale. Dopo lo fa, sta andando a rendere il portafoglio. Rendering è una funzione, quindi ogni volta che siamo in un controllore, chiameremo render, faremo di il file e quindi i dati che stiamo passando in, in modo che chiameremo in portfolio.php--tipo di passaggio in quanto i dati in modo che il portafoglio in grado di gestire questo. Ed ora, qui, abbiamo il nostro modulo login.php.  Questo è il controller che si occupa della pratica Logging in Qui, controlla se un modulo è stato inviato a questo file e si occupa con la convalida della presentazione. Vedremo in questa funzione scusarsi. Quando si desidera stampare un messaggio di errore, usiamo scusiamo e che reindirizza l'utente a una pagina specifica che stampa il messaggio di errore specifico che ci indicano. Proseguendo, si interrogare il database - we'll entrare in più di questo in seguito. Poi si vede che qui, se un modulo non è stato presentato, quindi rende una forma. Ciò significa che va a login_form.php, quindi diamo un'occhiata a questo. Login.php è in realtà dove si vede la si occupano HTML con l'attuale aspetto visivo. Qui abbiamo un tag input per il nome utente, un ingresso per la password, così come un pulsante di invio. Questo è in realtà dove l'aspetto visivo e il modulo HTML sta per essere tenuto. Qui, si dice che sta per essere presentata da un certo metodo, chiamato post. Vedremo le differenze tra i metodi - inviare vs arrivare, c'è anche una cosa chiamata put - ci arriveremo in quei metodi più tardi, ma per l'interesse di questo pset, Vorrei consigliamo vivamente di usare il post. Sappiamo che, in fondo una volta che questo modulo viene inviato - da login_form.php-- poi andrà all'azione - login.php-- sostanzialmente passare tutti quei parametri di quelle forme in login.php. I risultati di tale modulo sono contenuti all'interno di questo array associativo messaggio. Gli indici dei diversi elementi della matrice posta sono esattamente quello che si specifica qui. Lei dice che il nome di questo ingresso è nome utente. Il nome di questo è la password. Allo stesso modo, si vede il nome utente come l'indice della matrice associativa lì. Se andiamo alla cartella includes, abbiamo questo file funzioni che sta per essere molto utile. Tutte queste funzioni sono implementate per voi. Non è necessario implementare in particolare uno di questi te stesso, ma andranno a molto utile. Abbiamo scusiamo, che come ho detto prima, sarà essenzialmente stampare un messaggio di errore per voi su una specifica pagina - apology.php. Poi abbiamo discarica, quindi se chiami dump e poi passare nella variabile, poi vi porterà a una pagina che verrà visualizzata quella variabile per voi. Poi abbiamo il logout, che sarà essenzialmente terminare la sessione di un determinato utente di. Ricerca sta per essere utile. Dal momento che abbiamo a che fare con le citazioni e le scorte, si sta andando ad essere in grado - ed è sostanzialmente in tempo reale. Abbiamo bisogno di sapere che cosa questi valori azionari sono, così abbiamo la funzione di ricerca che si occupa di documentazione di Yahoo degli stock. Una volta che si cerca un certo simbolo di uno stock, tornerà a voi il simbolo di borsa così come il nome e il prezzo corrente di tale stock. Questa è la funzione di ricerca. Quindi abbiamo a che fare con mySQL, quindi abbiamo intenzione di voler eseguire determinate query sul nostro database SQL. Abbiamo a che fare domanda - al tipo di qualche astratto di che fuori. Stiamo andando a passare nella stringa tutta la nostra query SQL - e tutte le variabili che vanno in esso - e ciò che questo non è in realtà l'esecuzione che per noi. Invece di dover scrivere tutto questo fuori ogni volta che si desidera eseguire una query - da ottenere tutti i risultati di quella query - allora si può solo chiamare la funzione di interrogazione, e tornerà a voi - a seconda di ciò che si sta utilizzando per la tua ricerca - probabilmente una fila di tutti i risultati che corrispondono alla query o simili. Più su che più tardi però. Infine, abbiamo redirect che, come suggerisce il nome, si viene reindirizzati a una pagina diversa. E poi abbiamo render, che abbiamo intenzione di chiamare un paio di volte. Quando sei in un controller, è necessario chiamare il rendering nella pagina del modello e poi passare i valori che il modello verrà poi affrontare. Tali valori sono probabilmente andando a che fare con il tipo di output che si desidera per essere visualizzata sulla pagina del modello. Va bene. Queste sono le funzioni, e c'è molto più da questo codice di distribuzione. Vi incoraggio a passare attraverso questa ed esplorare da soli. Inoltre, la specifica probabilmente si cammina attraverso alcuni altri elementi del codice di distribuzione. Ecco un riassunto delle funzioni che si trovano in functions.php. Va bene. Il primo compito è quello di consentire agli utenti di registrarsi al sito. In questo momento, c'è un modulo di login sul sito web, e si sono dotati di alcuni utenti con password. È possibile utilizzare i nomi utente e accedere, ma si vuole permettere alle persone di fare i loro nomi propri e si aggiungono al sito. Il layout per la registrazione è abbastanza simile al modulo di login, tranne il nome utente non è pre-esistente, e l'utente deve anche fornire una nuova password, e quindi tipicamente abbiamo una conferma password. Una volta che l'utente immette tutti di tali informazioni, vogliamo aggiungere alla nostra database di utenti. Stiamo per avere un database - un database SQL - che stiamo andando fare riferimento. In tale database, avremo una tabella con tutti gli utenti contenente il nome utente, la password, e anche quanti soldi hanno. Nel registro, vogliamo permettere loro di inserire tali informazioni. Vogliamo mostrare che la forma. Vogliamo fare in modo che la loro password - che sono entrati, e poi anche che le password corrispondano quando lo inserisci due volte. Dopo tutto ciò che viene fatto - supponendo che tali errori vengono controllati - poi vogliamo aggiungere gli utenti al nostro database. Infine, una volta che ti sei registrato, è abbastanza conveniente se non è necessario eseguire nuovamente una volta effettuata la registrazione, in modo che andremo per accedere in al sito web se sono registrati con successo. Il primo compito è quello di visualizzare la forma, e questo è in realtà sta per essere - questo processo di registrazione intero sta per essere modellato molto da vicino dopo il login tranne che invece di login.php si potrebbe avere register.php. Invece di login_form.php--che è il modello - avrete registrare il modulo. Ti consigliamo di aggiungere un altro campo - un campo di conferma password - invece di uno solo il nome utente e una password. Avanti, vogliamo verificare se le password corrispondono o sono vuoti. Abbiamo il controller - register.php--che sta andando a prendersi cura di fare questi controlli. Quando un modulo viene inviato tramite il metodo post, allora tutte queste variabili sono contenute all'interno della matrice post. Si vuole fare in modo che la matrice valore posto a indice la password corrisponde all'elemento di conferma. Si vuole fare in modo che essi non sono vuote, e si vuole fare in modo che siano la stessa cosa. Una cosa comoda di PHP è che non abbiamo bisogno di usare le stringhe confrontare più. Possiamo usare l'uguale-uguale operatore  verificare se le stringhe sono uguali tra loro. Per la gestione degli errori, ti consigliamo di chiedere scusa. Per scusarsi, è sufficiente chiamare la funzione  e quindi specificare un tipo di messaggio che si desidera trasmettere. Quindi si desidera aggiungere l'utente al database. Fino ad ora, tutto quello che abbiamo fatto è solo scambi a livello locale con i risultati del modulo. Ora, vogliamo davvero per aggiungerli al nostro database. Per questo, per prima cosa vuole fare in modo che il nome utente non è vuoto. Capire che su un sito web, non si può avere più utenti con lo stesso nome utente, quindi ti consigliamo di fare in modo che quando si inserisce qualcosa nel database - inserire un nuovo utente - allora non si ottiene una collisione tra un pre-nome utente esistente e il nome utente che un utente sta cercando di presentare. Per questo, una volta che si esegue una query - l'inserimento di un determinato utente con la propria password e di un importo iniziale di cassa - una volta che si chiama query, quindi mySQL effettivamente restituire false se fallisce. La struttura di utenti è tale che l'utente è un valore unico, così non si può avere più di una. Quando si tenta di inserire una nuova riga con un nome utente già esistente, che sta per restituire false - come un booleano-valore falso. Una cosa difficile è che si desidera controllare se il risultato è il risultato della query. Se fallisce, allora ti consigliamo di controllare con la tripla-operatore di uguaglianza. Questo è in realtà andando a verificare se vi sia un errore o meno, considerando che, in un semplice uguale-uguale, sarebbe vero se la riga era vuota. Il risultato di un guasto se c'è una collisione tra il nome utente è il valore effettivo false. Ecco come si dovrebbe inserire in un database. Ecco la query che si sarebbe rigorosamente in SQL. Una cosa è che si può effettivamente andare al sito web che gestisce il database SQL e giocare lì inserendo manualmente sia i valori o righe. Il risultato sarà quello che è l'uscita SQL. È inoltre possibile eseguire comandi SQL all'interno del database  e poi vedere che cosa la sintassi potrebbe essere, e poi tradurlo in funzione di query che abbiamo in pset 7, che sta per essere molto simile a le query che effettivamente eseguiti. Se volessi inserire una nuova riga nella mia tabella di utenti, allora vorrei precisare inserto in utenti, che è il nome del mio tavolo. Poi vorrei specificare i nomi delle colonne. Poi vorrei fornire i valori insieme con la mia password. Password in nostro tavolo gli utenti non vengono memorizzate come solo la stringa. Essi vengono memorizzati come versione cifrata, quindi ti consigliamo di eseguire la funzione cripta la password attuale, e che vi darà il tipo corretto di memoria per l'array utenti. L'esecuzione di questo si inserisce una nuova riga nella tabella degli utenti. Per affrontare con la funzione di interrogazione, prima in C abbiamo usato il segno di percentuale come segnaposto. Analogamente, lo stesso concetto di un segnaposto applica qui. Con la query è necessario specificare l'intera query, tranne quando hai a che fare con le variabili come ingresso nella query, allora invece di effettivamente mettere dentro - come quando abbiamo avuto istruzioni printf in C. Ci avrebbe messo la stringa e poi hanno un segnaposto lì, e poi dopo ogni virgola, specificare quale variabile che abbiamo avuto. Qui, abbiamo intenzione di utilizzare il segno punto interrogativo come il nostro segnaposto e quindi passare in ciascuna variabile, rispettivamente in ordine, per i segnaposto - in cui queste variabili dovrebbe andare. Quindi, ecco, il primo punto interrogativo sarà sostituito dal nome utente reale quindi il punto interrogativo seconda la password. Poi, finalmente, una volta che li hai registrato e aggiunto al database, poi si vuole accedere al loro sito web. Abbiamo una specie di super-globale variabile di sessione chiamata. Sessione prende un certo id, e che id corrisponde all'utente che è attualmente loggato Che cosa si vorrà fare è trovare quale sia il loro ID utente è e quindi impostare che id di sessione che come id dell'utente specifico. Una funzione che si desidera utilizzare: ecco un comando SQL che recupererà l'ultimo numero ID inserito dalla tabella. Poi righe chiamerà - it'll chiamare il id - it'll assegnare un nome al numero che restituisce. Sarà chiamano id. Ora che abbiamo finito di registrare, e possiamo andare avanti a citare. Cita permette all'utente di inserire il nome di un determinato, e poi tornerò le qualità di tale stock. Che cosa si vorrà fare qui è di avere un controller e alcuni modelli. In questo caso, stiamo andando ad avere un controller che sta andando a fare tutto il pensiero per noi. E 'intenzione di cercare il simbolo e poi passare i valori ai modelli che stampano fuori. Stiamo per avere 2 modelli qui. Stiamo per avere 1 modello che fornisce la forma in cui gli utenti stanno per inserire il nome del titolo - il nome della condivisione. Poi stiamo anche andando a voler un altro modello che visualizza tali valori. È possibile guardare in di accesso per un esempio di come si dovrebbe avere una forma che accetta l'input, tranne qui, vogliamo solo 1 campo. Non vogliamo un nome utente e un campo di password. Vogliamo solo 1 campo di testo che permette all'utente di inserire il nome di un determinato. Poi si desidera inviare i dati - una volta che avete guardato tale stock - a quote_form.php. Di ricerca restituirà il simbolo di un titolo, il nome, e un prezzo. Coloro che sono contenuti all'interno di un array associativo. Cercare la funzione di ricerca all'interno del functions.php per maggiori informazioni sui tipi di ritorno di quelli. Fantastico! Allora finalmente, ti consigliamo di visualizzare le informazioni sulle azioni. Ti consigliamo di visualizzare probabilmente - hai desidera accedere a queste variabili. Una volta che hai il prezzo in una variabile - così come il nome e il simbolo - allora ti consigliamo di visualizzare quelli nella vostra pagina del modello. Questo modello di pagina potrebbe essere chiamato show_quote.php o qualcosa del genere. La tua pagina quote.php renderebbe citazione spettacolo e quindi passare in tutti quei valori. Poi, nella pagina php, in realtà stampare quei valori all'aspetto HTML della pagina. Basta utilizzare la funzione di stampa e passare nel prezzo. Ci sono 2 modi - si può decidere di concatenare con l'operatore punto, o utilizzare un segnaposto. Gli utenti alla fine saranno acquistare e vendere azioni. Vogliamo permettere loro un modo di vedere tutti i titoli che attualmente hanno. Stiamo andando a chiamare il loro portafoglio. Portafoglio avrebbe, presumibilmente per ogni utente, contiene un gruppo di righe elenco del tipo di azione che hanno e quindi come molti di quelli che hanno. La nostra tabella esistente - in questo momento abbiamo una tabella di utenti nel nostro database. Che contiene nome di un utente e la loro password e quanti soldi hanno. Non c'è modo vero di memorizzare tutti i loro titoli all'interno di questo. Non è che possiamo inserire nuove colonne per ogni azione. Questa sarebbe una fila molto, molto a lungo perché abbiamo una quantità infinita dei tipi di titoli che si potrebbero avere. Così, invece quello che faremo è all'interno dello stesso database, avremo una tabella utenti, ma poi ci sarà anche un tavolo portafoglio. La tabella portafoglio sarà sicuramente collegata alla tabella degli utenti, ma invece la struttura della tabella portafoglio avrà le informazioni sulle azioni, il numero di azioni di tale archivio, l'utente ha di un utente così come il numero id particolare. Hai la tabella utenti, che ha un id e il nome utente, l'hash - che è la password, la password cifrata - e quindi la quantità di denaro che hanno. Il numero ID sarà legato al numero ID del portafoglio. Il portafoglio sarebbe solo il simbolo del titolo, nonché delle azioni - il numero di azioni di tale stock che l'utente ha. In quel tavolo portafoglio si sarebbe sostanzialmente tutte le azioni possedute da tutti gli utenti sul tuo sito. In seguito, specificare solo parti di un utente di certo - solo il loro portafoglio - si dovrebbe recuperare i valori dalla tabella del vostro portafoglio in modo tale che il numero ID è specifico per l'utente. Quando si visualizza il portafoglio, ti consigliamo di segnalare ciascuno dei titoli del portafoglio di un utente. Ti consigliamo di segnalare il numero di azioni e il valore attuale di tali azioni. Tale valore corrente di tali parti non è memorizzato nella tabella di portafoglio perché sta per essere aggiornato - al minimo - ogni giorno da Yahoo. Per ottenere queste informazioni, non è possibile fare riferimento che dalla query SQL. Quale funzione prevede che, per noi? Quale funzione avrà il prezzo? E 'di ricerca, in modo da utilizzare ricerca su un particolare simbolo vi darà un sacco di informazioni. Vi darà 3 pezzi di informazione - il nome, il simbolo, così come il prezzo. Una volta che un certo simbolo di ricerca, allora si può ottenere il prezzo, e quindi è possibile utilizzare il prezzo da visualizzare nel vostro portafoglio. Il portfolio dovrebbe anche visualizzare saldo corrente di cassa dell'utente. Tale campo viene memorizzato all'interno della vostra tabella utenti. Allora ricordando come stiamo praticamente dover - stiamo avendo diversi tipi di file PHP. Stiamo per avere un controller che sostanzialmente fa tutto il pensiero per voi. E poi abbiamo un modello in cui il modello si occupa di output dei dati. Bisogna pensare a quali variabili del controllore dovrà tenere trovi Se abbiamo a che fare con un portafoglio che trasmette ogni nome, il simbolo e il numero di parti, così come il prezzo corrente di un titolo, allora ti consigliamo di trovare un modo per passare sostanzialmente in - è possibile passare una matrice di valori che corrispondono a questo. Andiamo in un esempio di come è possibile recuperare tutti i titoli di proprietà di un utente particolare. Questo non ha a che fare - ancora - con il prezzo del titolo. Ciò dovrebbe fare è eseguire una query. Sarebbe ottenere il simbolo e le azioni da - Chiamo questa tabella, ma in questo caso, quale sarebbe? Qual è il nome della tabella che abbiamo a che fare con il simbolo che ha e condivide per un utente particolare? Si tratta di utenti o di portafoglio. Portfolio. Che questo sarebbe fare è portafoglio di query per i simboli e le quote di per un particolare utente. Ecco, dico, (Selezionare il simbolo, azioni da tbl - ma invece di tavolo, si sta andando a sostituire quella con il portafoglio. 'Dove' è fondamentalmente la mia condizione. Sto dicendo che vogliono solo gli array associativi che corrispondono  a questa condizione segue - id pari.  Poi sto mettendo un segnaposto lì e poi id di sessione. Che questo sarebbe fare è dire che per ogni riga in righe. Questo è un modo pulito, invece di dover per impostare un ciclo for che scorre su tutti gli indici, poi in PHP si può avere un ciclo for-each. Se si dispone di un dato array, allora si può dire che ho intenzione di chiamare ogni elemento successivo - Vado a chiamare ogni elemento questo nome. Quindi, per ognuno di questi elementi, ho intenzione di chiamarli questo, allora posso farlo. In questo per ogni, si dispone di righe come la matrice reale, e ogni riga che si vuole chiamare riga. Ogni volta che si esegue il corpo, che andrà su e sarà aggiornare la riga all'elemento successivo in fila. Ora, in termini di acquisto di azioni, quello che vogliamo fare è ottenere il titolo che l'utente vuole acquistare e la quantità di azioni che l'utente vuole comprare, e poi - se vogliono - aggiungere che le azioni al loro portafoglio. Ovviamente, se stanno comprando qualcosa, che sta andando a diminuire la quantità di denaro che hanno, in modo che sta andando a diminuire il loro denaro. Stiamo andando a che fare con l'aggiornamento del portafoglio, nonché la tabella utenti, che contiene la cassa. Ma in primo luogo, è necessario per ottenere lo stock effettivo e la quantità di azioni che l'utente desidera. Per questo, avrete bisogno di un modulo HTML che chiederà per il simbolo dello stock che si desidera acquistare e il numero di azioni. Allora ti consigliamo di aggiungere. Ti consigliamo di selezionare certi valori. Abbiamo attraversato questo un po 'già, ma quando si sta cercando di ottenere alcune righe - recuperare alcune righe dalla tabella SQL, questa è la seguente sintassi. Hai selezionare, e quindi se si specifica una stella, che ti sostanzialmente riportare l'intero, intera riga per voi. Poi di nuovo, si ha la condizione in cui, e poi si specifica - Voglio solo il nome utente sia uguale alla mail-in, così sarà solo recuperare la riga in utenti che corrisponde alla mail-in. Quando un utente vuole aggiungere una quota di un portafoglio, è necessario verificare la presenza di alcuni errori. Si vuole fare in modo che l'utente può effettivamente permettersi il brodo, quindi ti consigliamo di controllare il loro denaro. Prima, abbiamo usato stella per recuperare una riga intera da una tabella SQL. Ma qui, si può in realtà solo specificare che io voglio solo 1 valore - Voglio solo contanti. Così qui, che sarebbe tornato il denaro per l'utente con il numero ID 1. Se un utente ha già acquistato un determinato titolo, ma poi compra più di detto stock, poi nel vostro portafoglio - non si vuole una linea separata, un'altra riga che contiene tale nuova transazione. In realtà si desidera aggiornare la quantità. Tutto ciò che sta cambiando veramente è la quantità di azioni che l'utente possiede. Se si utilizza la query INSERT INTO - quindi è sufficiente inserire nel vostro portafoglio tutti questi valori - l'utente numero ID e il simbolo dello stock che stanno comprando e le azioni, allora dovrete anche specificare, beh, se mi imbatto in una chiave duplicata - in questo caso, il duplicato della chiave non è solo id dell'utente, ma anche il simbolo stock - perché si può avere solo - la nostra premessa è che si può avere solo 1 riga  che corrisponde a uno specifico simbolo. Così, sulla chiave duplicata - se si esegue in una collisione lì - si sta solo andando ad aggiornare azioni per il suo nuovo valore. Azioni pari a tutto quello che avevamo prima, più il numero di azioni che l'utente sta acquistando. Ora che abbiamo aggiornato la tabella di portafoglio, dobbiamo provare a aggiornare contanti dell'utente. Questo è nella tabella utenti, in modo che andremo ad essere sottraendo una certa quantità di denaro. Presumibilmente, sta andando in contanti pari a meno di cassa - e quindi una certa quantità. Per aggiornare il denaro, si farebbe - se volevo portare via i soldi dalla posta-in, quindi vorrei eseguire questa query - "Utenti" di aggiornamento e quindi impostare la colonna denaro in contanti - Vorrei rimuovere dollari 9999 solo se il nome utente è uguale alla posta-in. Ma, in questo caso, non vogliamo sottrarre 9999 specificamente. Vogliamo precisare, beh, vogliamo sottrarre il prezzo corrente del titolo moltiplicato per il numero di azioni che stanno comprando. Ora abbiamo permesso loro di vedere tutti i titoli che hanno, nonché acquistare più azioni. Abbiamo inoltre già permesso loro di cercare il prezzo corrente di un titolo. Qui vogliamo consentire loro di venderli. Per prima cosa desidera visualizzare in fondo - vogliamo consentire loro di vedere tutti i titoli che hanno, ecco si desidera visualizzare tutte le righe dal portafoglio. Se scelgono di vendere un determinato titolo, poi andremo a supporre che essi vogliono vendere tutto. Essi non sono solo andando a vendere il 50% delle loro azioni, che stanno andando a vendere il 100% di esso. Possiamo solo cancellare l'intera riga di portafoglio. Siamo in grado di eliminare le azioni della determinato utente del simbolo certa. C'è la sintassi per questo. Poi vogliamo aggiornare il denaro. Stiamo per essere aggiunta in denaro pari all'importo delle azioni che stanno vendendo moltiplicato per il prezzo corrente del titolo - non è il prezzo a cui l'hanno comprato, ma il prezzo a cui sono - il prezzo corrente quando lo stanno vendendo. Per fare riferimento al prezzo corrente di un titolo, si desidera utilizzare di ricerca, che vi darà il prezzo di un titolo al momento attuale. Ora ci ritroviamo con la storia, cui si desidera consentire a un utente di tenere traccia di tutte le loro operazioni - vuole vedere ogni volta che hanno venduto qualcosa, ogni volta che ha acquistato uno stock. Vogliamo specificare il momento in cui hanno fatto che, oltre a quanti hanno acquistato e ciò che lo stock era. Non abbiamo alcuna corrente, struttura esistente che specifica che? Bene, abbiamo portafoglio che visualizza i titoli che il numero di un utente per una determinata quota. Ma stiamo strutturando portafoglio nel modo in cui si aggiorna quando compriamo di più, mentre la storia dovrebbe - se si compra Apple, 10 parti di esso, e poi in seguito vendere 5, allora si vorrebbe vedere quelle separatamente come azioni separate, righe separate. Considerando che l'azione di visualizzare che nel nostro portfolio table sarebbe solo un aggiornamento di quella riga particolare,  quindi probabilmente stai andando a voler un altro tavolo. Nella nostra banca dati, abbiamo la nostra tabella degli utenti, abbiamo il nostro portfolio table, e adesso ci vorrà probabilmente una tabella cronologica. Questa tabella la storia può tenere traccia della data corrente, nonché il simbolo di borsa particolare, così come il numero di azioni, e poi che l'azione che è - se si stavano comprando le azioni o se li stavano vendendo. Per far fronte a oggi, ci sono un paio di modi in cui si può fare questo. PHP ha un modo di tenere traccia della data, che è possibile cercare da soli. In SQL è anche possibile utilizzare né ora o data e ora corrente. Dipende da voi. Basta fare in modo che ogni volta che un utente acquista o vende, sarai aggiornato il loro denaro nella tabella utenti, è Aggiorneremo le righe nella tabella portafogli, allora si dovrà anche essere l'aggiornamento della storia, quindi ci saranno 3 query SQL separati sarai chiamata lì. Abbiamo un sacco di funzionalità ora. Solo un paio di promemoria che nel tuo file di indice, si desidera collegare ad almeno il tuo - ma ti consigliamo di consentire a un utente di collegare alla pagina buy.php. Che sta per consentire a un utente - buy.php è il controller, in modo che sta andando a uno inviare a - che sta per inviare al modulo che ti permette di guardare le cose. Abbiamo la storia. Abbiamo il logout, ottenere un preventivo e poi vendere. Questi sono al minimo ciò che si vuole mostrare. Per quanto riguarda il portafoglio, il portafoglio è realmente visibile nella pagina di indice. Se vai all'indice, qui vediamo che rende portfolio.php e passa in array associativo - in pratica il titolo è uguale a portafoglio. Quindi, questo è il controllore. Se andiamo al modello di portfolio.php, poi tutto quello che ha è - mostra fondamentalmente un quadro che dice, oh, questo sito è in fase di allestimento. Più tardi, una volta che si passa a - hai essere di passaggio di informazioni sostanzialmente più specifico. Invece di solo il titolo, probabilmente sarete passaggio in più cose. Una volta che hai quei valori, allora portfolio.php può trattare con quei valori e li stampa in qualsiasi tipo di ordine. Una volta implementato tutti coloro, è inoltre necessario implementare funzionalità di altri 1. Questo può essere che permette a un utente di modificare la propria password, per reimpostare la password, se l'hanno dimenticato - così per la reimpostazione della password, quindi probabilmente anche voler modificare registrare in modo che permette loro di specificare una e-mail, quindi se si dimentica la password, poi si può ottenere che. Si può probabilmente inserire nel proprio nome utente, quindi una e-mail sarà inviata a loro con un link per poter reimpostare la propria password. Si può avere qualcosa che permette agli utenti di ottenere le ricevute ogni volta che acquistare o vendere qualcosa, e poi finalmente, permettere loro di aggiungere denaro al loro sito web. Giusto per tornare al concetto di controller e modelli un po '. Avrete qualcosa di simile a una - così avrai un controller qui. In questo momento, stiamo guardando l'esempio login.php. Quando si dispone di un controller, in fondo si sta andando a prendere 2 casi. Quando abbiamo controller, siamo in questo pezzo che siamo anche un po 'di trattare con quando abbiamo forme pure. Il controller, fondamentalmente, sono azioni separate - uno se una forma è già stata presentata, e poi due se l'utente è in arrivo a quella pagina per la prima volta e deve ancora input forma. Ho intenzione di passare a quel primo caso, prima di salire al primo caso di avere il modulo trovi Qui si dice, se il modulo è stato inviato con il metodo POST - non ti preoccupare che un po '. Non preoccuparti troppo, ma capisco che in fondo questa funzione si occupa di se un modulo è stato inviato o meno. Questa condizione è vera se un utente ha inviato il modulo. In caso contrario, si sta andando a voler chiamare login_form.php rendering, e quindi passare nel titolo. Questo titolo è solo in fondo andando a comparire nell'intestazione. Quello che fa è fondamentalmente dice, va bene - beh, se un utente va a login.php e non ha fatto il log in, poi voglio inviarli alla pagina che ha quella forma che permette loro di immettere il nome utente e la password. Poi vado a login_form, e poi che ha la forma vera e propria. Poi, una volta che l'utente invia quella forma, che stanno andando a presentarla al login.php con il post metodo. Poi ho in realtà sta per entrare in questa sezione del mio if-else loop. Allora è qui che abbiamo a che fare con i valori inseriti nel modulo. E 'qui che abbiamo a che fare con quelli. Poi una volta che avete a che fare con quei valori - se hai a che fare con - dire che abbiamo a che fare con la pagina quote.php dove qualcuno può inserire un titolo che vogliono guardare in alto, e poi vedere che il display - che una specie di simile qui. Qui abbiamo un form di login - you'd probabilmente una forma preventivo - ma poi una volta che l'utente ha effettivamente presentato tali informazioni, allora ti consigliamo il controller per passare in un altro modello che mostrerà loro che informazioni reali. E allora proprio da queste parti, allora probabilmente - verso la fine della sua condizione qui - il se il metodo è uguale a post - allora probabilmente si vorrà rendere un'altra pagina - la citazione show - che ti manda a questa pagina - show_quote.php-- e poi in quel file si riferimento a tali valori. Ha senso? Abbiamo un controller che si occupa prevalentemente di 2 casi - se hai inserito un modulo o meno. Se non è stato inserito un modulo, allora si viene reindirizzati a quella forma, che poi rimesso a quella pagina. Poi, una volta che si dispone di informazioni nel controllore, tale organismo si occuperà di informazione se necessario - a cercare i valori per lo stock, e poi una volta che è guardato questi valori e li ha in una matrice ben formattata, allora può passare questo array nella pagina del modello  che si occupa di emettere tali informazioni. Anche in questo caso, dal momento che sul Web, che sta per essere divertente. Siamo al di fuori di C, quindi non si è limitati a ASCII e che il terminale di uscita, così divertirsi con questo. È possibile rendere il più visivo come si desidera. È possibile consentire agli utenti di ingresso milioni di dollari alla volta, o li limitare e significa veramente essere e permettere loro di entrare solo 1 centesimo alla volta o qualcosa del genere. Sicuramente essere sicuri di divertirsi con questo. Codice PHP è un po 'più semplice, in quanto è un po' più facile per tracciare il vostro pseudocodice l'attuazione nella prassi. Quindi, sicuramente divertirsi con questo, perché in realtà è il nostro ultimo pezzo CS50. Con questo, questo era Scenario 7. Una volta che hai finito di vedere la procedura dettagliata e finito il tuo pset, allora questi erano anche pset, e ora siamo al prodotto finale - dopo che otteniamo attraverso quiz 1. Poi si spera è possibile utilizzare gli strumenti che hai imparato dai pset - non solo la sintassi, ma più la nozione astratta di come prendere una certa - piace, io voglio fare questo e poi effettivamente attuazione di tale. Imparare a lottare con la sintassi e il codice di distribuzione. Lettura codice di altre persone, e quindi l'interpretazione che l'utilizzo di preesistenti funzioni. Quindi, buona fortuna con il pset ultimo. E 'stato un piacere guidare le procedure dettagliate. Spero che sono stati utili per voi. Questi erano Procedure dettagliate, e grazie mille. [CS50.TV]