[Powered by Google Translate] [Problème Procédure pas à pas Set 7] [Zamyla Chan] [Université de Harvard] [C'est CS50] [CS50.TV] Bonjour à tous et bienvenue dans Procédure pas à pas 7, CS50 Finances. Maintenant, nous sommes officiellement fait avec tous les psets en CS50, et nous vient de partir avec un autre qui va être mise en œuvre plaisir d'un site Web où les utilisateurs peuvent se connecter à CS50 Finance et acheter et vendre des actions. Aujourd'hui, nous allons avoir quelques outils à notre disposition. Nous allons parler de permissions. Chaque fois que vous avez un dossier Web, vous allez vouloir pour permettre aux utilisateurs d'exécuter certains fichiers mais aussi il suffit de lire les autres, donc nous allons regarder dans les autorisations et comment vous pouvez définir ceux-ci. Ensuite, nous allons examiner en PHP, HTML et du code SQL. Premièrement, les permissions. Lorsque vous êtes dans le terminal dans un répertoire donné, alors ce que vous voulez faire, c'est que vous voulez exécuter la commande chmod. Cela est suivi par des lettres ou des numéros correspondant à ce que vous voulez essentiellement le monde de voir, vous-même pour voir, etc Par exemple, quand vous avez un dossier, alors vous voulez ce dossier pour être exécutable par tout le monde qu'il voit, si ce que vous faites est que vous pouvez exécuter la commande chmod a + x puis le nom de votre dossier. Lorsque vous avez un fichier comme les fichiers CSS ou les fichiers image - comme les fichiers JPEG et bitmap, des choses comme ça, ou tout autre code JavaScript - vous voulez que ce soit lisible par tout le monde, oui, alors ce que vous faites, c'est que vous pouvez utiliser le joker - qui est un astérisque - essentiellement à indiquer dans le dossier CSS - tout dans ce dossier -  Je vais dire que ça va être lisible par tout le monde. Avec les autorisations, lorsque nous utilisons les lettres, Nous pouvons également utiliser des chiffres à la place. Donc, vous voyez que finalement quand vous voulez quelque chose pour le rendre exécutable - qui est représentée par le nombre 1 - quelque chose pour être lisible est le numéro 4, puis - écriture est le numéro 2 - et si essentiellement lorsque vous voulez une combinaison de ceux-ci, puis vous les ajoutez. Si vous voulez quelque chose pour être lisible, inscriptible et exécutable, alors vous ajouterez une hausse de 4, 2 et 1 et qui vous donnerait 7, puis quand vous avez un dossier que vous voulez que ce soit exécutable par tout le monde - ainsi que lecture et écriture - alors que vous faites 7, 1, 1. Ce serait 7 pour vous, puis 1 pour les autres personnes. Lorsque vous avez la spécification, il va effectivement spécifier les dossiers et les fichiers qui doivent être chmod-ed spécifiquement. Par exemple, lorsque vous avez des dossiers - ceux qui sont 7-1-1 - lorsque vous avez des images ou HTML, CSS, JavaScript, puis ceux vont être 6, 0, 4 - ou 6, 4, 4 - puis les fichiers PHP vont être de 6, 0, 0. L'idée derrière cela est que les utilisateurs ne devraient pas voir réellement votre code PHP, mais juste être en mesure de voir le résultat. Super! S'engager dans PHP. Simplement, quand vous voulez un fichier PHP, le suffixe est. Php. Vous pouvez également mélanger HTML avec du code PHP. Si vous avez un fichier HTML, par exemple, alors vous pouvez le joindre à l'angle gauche, point d'interrogation, php - mettre votre code php - puis fermez ce avec un autre point d'interrogation et un angle droit. Les variables en PHP sont beaucoup plus faciles à traiter que les variables en C. Toute variable commence juste avec un signe de dollar en face d'elle, et ils sont faiblement typé. Cela signifie que vous n'avez pas besoin de vous soucier de mettre quelque chose égal à une chaîne ou à un nombre entier. Vous pouvez tout simplement dire, c'est mon nom de la variable et alors c'est sa valeur, donc ça va être plus facile à traiter là-bas. Une autre chose est que PHP vous permet d'utiliser les tableaux associatifs. Vous pouvez simplement définir un tableau comme vous le feriez en C en disant, le signe du dollar, le nom de votre tableau-égaux, puis entre crochets ont fondamentalement juste la liste des valeurs de tous les éléments du tableau. Mais, en PHP ce que vous pouvez faire est de spécifier aussi fondamentalement - c'est un peu comme une fonction de hachage. Vous pouvez spécifier l'index - ce que vous allez l'appeler - puis qui correspond à une valeur. Si vous avez réellement passer a = 1, b = 2, c = 3, alors votre tableau à l'index vous donnera un 1. Cette pset vous réchauffer avec un peu de PHP dans une section de questions, et ensuite nous plonger dans CS50 Finances. Nous avons quelques - nous avons certaines fonctionnalités, essentiellement, à mettre en œuvre dans ce site web. Nous voulons permettre aux utilisateurs de s'inscrire sur notre site avec un nom d'utilisateur et un mot de passe. Nous voulons leur permettre de consulter un devis, puis nous imprimer le nom de cette citation ainsi que le prix actuel que ça se passe. Nous voulons leur permettre de voir un portefeuille de toutes les actions qu'ils ont acheté à ce jour. Nous voulons également leur permettre d'acheter des actions, ainsi que de les vendre. Et puis enfin, nous voulons leur permettre de voir l'histoire de toutes les opérations qu'ils ont effectuées. Puis, enfin, une fois que vous avez mis en place tout cela, alors vous êtes libre de mettre en œuvre une fonctionnalité supplémentaire. Nous irons dans ceux-ci. Ceux-ci peuvent être soit des utilisateurs permettant d'obtenir de l'argent supplémentaire en déposant de l'argent supplémentaire, ou vous pouvez leur permettre de modifier leur mot de passe, ou quelque chose comme ça, les envoyer par courriel un reçu lors de l'achat ou la vente d'un stock. Il ya un nombre limité de fonctionnalités que vous pourriez vous mettre en œuvre, de sorte que c'est la dernière là-bas. Comme il s'agit d'un site web, vous les gars ont aussi beaucoup de liberté pour le personnaliser. Nous offrons un peu de code CSS, mais vous êtes certainement libre de le modifier, faire plus joli, mais il sous-jacent est une fonctionnalité de base il faut donc toujours se référer à la spécification de ce que vous avez réellement besoin d'inclure là-bas. Suite à la spécification, nous allons utiliser l'appareil comme un serveur aussi. Ça va être accueilli notre site pour nous, sur son serveur local. Si vous suivez ces instructions et décompressez le code pset de distribution 7 dans votre dossier d'hôte virtuel hôte / local,  alors vous pouvez simplement visiter http://localhost/ dans Google Chrome dans l'appareil, et puis vous atteignez le code dans lequel vous avez écrit pset 7. Pset 7 est livré avec un tas de code de distribution, et nous espérons que we've - à travers toutes les psets avant cela - nous a habitués à la lecture par code de répartition, comprendre quelles fonctions sont déjà prévus, et comment nous pourrions être en mesure d'utiliser ceux-ci et les autres fonctions que nous allons être mise en œuvre. Dans ce cas, nous avons 3 dossiers. Nous avons un dossier de HTML, un dossier comprenant, et un dossier de modèles. Ce que nous allons faire avec ce pset est une sorte de séparation de la pensée - la pensée de programmation - du code PHP avec l'aspect visuelle réelle. Nous allons avoir un fichier PHP qui fait tout de la pensée, se lit dans la base de données, imprime les choses, a if - des choses comme ça - et puis ça va passer des données dans notre fichier de modèle - ou le fichier template.php. Qu'est-ce qui va faire est de lire les données, puis ce sera l'imprimer. Nous pouvons traiter modèles comme "stupide" car nous ne les voulez vraiment à faire beaucoup de travail dans le calcul de choses. Nous voulons que nos contrôleurs de le faire. Un peu sur ce point - nous allons jeter un coup d'oeil à une partie du code de la distribution. Ici, nous avons notre fichier index.html, et il est assez vide. Essentiellement, ce qu'il fait - il dit, eh bien, je vais exiger que le fichier configuration.php. Nous ne voyons pas ce droit, mais il s'agit essentiellement d'appeler le fichier configuration.php, et l'exécution de ce. Après avoir fait cela, ça va rendre le portefeuille. Rendering est une fonction, donc chaque fois que nous sommes dans un contrôleur, nous appellerons rendu, nous allons lui donner le fichier et ensuite les données que nous en passant, de sorte qu'il va appeler portfolio.php--type de passage dans ces données afin que le portefeuille peut régler ce problème. Et maintenant, ici, nous avons notre formulaire de login.php.  C'est le contrôleur qui prend essentiellement en charge de l'exploitation forestière po Ici, il vérifie si un formulaire a été soumis à ce fichier et traite de la validation de la soumission. Nous allons examiner cette fonction apologize. Quand on veut imprimer un message d'erreur, nous utilisons des excuses et qui va rediriger l'utilisateur vers une page spécifique qui permet d'imprimer le message d'erreur spécifique que nous indiquons. Poursuivant, il interroge la base de données - nous allons vous donner plus de cela plus tard. Alors, vous voyez que ici si un formulaire n'a pas été soumis, il rend un formulaire. Cela signifie qu'il va login_form.php, nous allons donc examiner cette question. Login.php est en fait où nous voyons le traitant HTML avec l'aspect visuelle réelle. Ici, nous avons une balise d'entrée pour le nom d'utilisateur, une entrée pour le mot de passe, ainsi que d'un bouton submit. C'est effectivement là où l'aspect visuel et le formulaire HTML qui va avoir lieu. Ici, il est dit que ça va être soumise par une certaine méthode, appelée post. Nous allons entrer dans les différences entre les méthodes - poster par rapport à vous, il ya aussi quelque chose qui s'appelle mettre - nous allons entrer dans les méthodes tard, mais pour l'intérêt de cette pset, Je vous encourage fortement à utiliser des post. Nous savons que, fondamentalement, une fois que ce formulaire est soumis - de login_form.php-- puis il ira à l'action - login.php-- essentiellement passer tous les paramètres de ces formes dans login.php. Les résultats de cette forme sont contenus dans ce tableau après associatif. Les indices des différents éléments dans le tableau après sont exactement ce que vous indiquez ici. Vous dites que le nom de cette entrée est le nom d'utilisateur. Le nom de celui-ci est mot de passe. De même, vous voyez le nom d'utilisateur que l'indice du tableau associatif là. Si nous allons vers le dossier comprend, nous avons ce fichier fonctions qui va être très utile. Toutes ces fonctions sont mises en œuvre pour vous. Vous n'avez pas besoin de mettre en œuvre spécifiquement l'un de ces soi-même, mais ils vont très utile. Nous avons des excuses, qui, comme je l'ai déjà dit, sera essentiellement d'imprimer un message d'erreur pour vous sur une page spécifique - apology.php. Ensuite, nous avons décharge, donc si vous appelez de vidage et passent ensuite dans la variable, alors il vous amènera à une page qui affichera cette variable pour vous. Puis nous avons déconnexion, qui sera essentiellement arrêter une session utilisateur en particulier de. Recherche va être utile. Étant donné que nous avons affaire avec des citations et des stocks, nous allons être en mesure - et c'est essentiellement en temps réel. Nous avons besoin de savoir ce que les valeurs boursières sont, nous avons donc la fonction de recherche qui traite de la documentation de Yahoo des stocks. Une fois que vous regardez un certain symbole d'un stock, il vous reviendra le symbole ainsi que le nom et le prix actuel de ce stock. C'est la fonction de recherche. Ensuite, nous avons affaire à mySQL, Nous allons donc faire défaut à exécuter certaines requêtes sur notre base de données SQL. Nous avons requête à traiter - à une sorte de résumé de cela. Nous allons passer à la chaîne entière de notre requête SQL - et toutes les variables qui vont dans le - et ce que cela ne se fait que pour nous exécuter. Au lieu d'avoir à écrire tout cela à chaque fois que vous voulez interroger - en obtenant tous les résultats de cette requête - alors vous pouvez simplement appeler la fonction de requête, et il va revenir à vous - en fonction de ce que vous utilisez pour votre requête - probablement une rangée de l'ensemble des résultats correspondant à la requête ou similaire. Plus sur cela plus tard cependant. Enfin, nous avons redirection qui, comme son nom l'indique, vous redirige vers une autre page. Et puis nous avons rendu, que nous allons appeler une couple de fois. Lorsque vous êtes dans un contrôleur, vous appelez rendre dans le modèle de page et ensuite passer dans les valeurs que le modèle sera ensuite traiter. Ces valeurs vont probablement avoir affaire avec le type de sortie que vous souhaitez à faire figurer sur votre page de modèle. D'accord. Ce sont les fonctions, et il ya beaucoup plus à ce code de distribution. Je vous encourage à parcourir et d'explorer ce vous-même. En outre, la spécification va probablement vous guidera à travers d'autres éléments de la clé de répartition. Voici un résumé des fonctions trouvées dans functions.php. D'accord. La première tâche est de permettre aux utilisateurs de s'inscrire sur le site. À l'heure actuelle, il ya un formulaire de connexion sur le site, et vous sont fournis avec quelques utilisateurs avec des mots de passe. Vous pouvez utiliser ces noms d'utilisateur et vous connecter, mais vous voulez permettre aux gens de faire leurs propres noms d'utilisateur et ajouter eux-mêmes sur le site. La mise en page d'inscription est assez similaire au formulaire de login, sauf le nom d'utilisateur n'est pas préexistante, et l'utilisateur doit également fournir un nouveau mot de passe, puis nous avons généralement une confirmation mot de passe. Une fois que l'utilisateur saisit tous de cette information, nous voulons les ajouter à notre base de données d'utilisateurs. Nous allons avoir une base de données - une base de données SQL - que nous allons faire référence. Dans cette base de données, nous aurons une table avec tous les utilisateurs contenant leur nom d'utilisateur, son mot de passe, et aussi combien d'argent dont ils disposent. Dans le registre, nous voulons leur permettre d'entrer cette information. Nous souhaitons afficher cette forme. Nous voulons faire en sorte que leur mot de passe - qu'ils sont entrés, et puis aussi que les mots de passe correspondent quand ils y entrent deux fois. Après tout cela se fait - en supposant que ces erreurs sont vérifiées - alors nous voulons ajouter à ces utilisateurs de notre base de données. Enfin, une fois que vous avez enregistré, c'est assez pratique si vous n'avez pas besoin de vous connecter à nouveau une fois que vous avez enregistré, donc nous allons les identifier sur le site si ils ont enregistré avec succès. La première tâche consiste à afficher le formulaire, et ce qui se passe réellement être - ce processus d'inscription entier va être modélisé assez près après la connexion sauf qu'au lieu d'login.php vous pourriez avoir register.php. Au lieu de login_form.php--qui est le modèle - vous aurez vous inscrire formulaire. Vous souhaitez ajouter un autre champ - un champ de confirmation mot de passe - au lieu de simplement le nom d'utilisateur et le mot de passe une personne. Ensuite, nous voulons vérifier si les mots de passe correspondent ou sont vides. Nous avons le contrôleur - register.php--qui va prendre soin de faire ces vérifications. Lorsqu'un formulaire est soumis via la méthode post, puis toutes ces variables sont contenues dans la matrice après. Vous voulez vous assurer que la valeur d'un tableau poste de passe index correspond à l'élément de confirmation. Vous voulez vous assurer qu'ils ne sont pas vides, et que vous voulez vous assurer que ce sont les mêmes. Une chose pratique sur PHP, c'est que nous n'avons pas besoin d'utiliser comparaison de chaîne plus. Nous pouvons utiliser l'opérateur est égal à égale-  pour vérifier si les chaînes sont égales les unes aux autres. Pour la gestion des erreurs, vous aurez envie de s'excuser. Pour s'excuser, il vous suffit d'appeler la fonction  puis spécifiez un type de message que vous voulez à la sortie. Vous devez ensuite ajouter l'utilisateur à la base de données. Jusqu'à présent, tout ce que nous avons fait est juste pour des transactions locales avec les résultats de la forme. Maintenant, nous voulons effectivement les ajouter à notre base de données. Pour cela, nous voulons d'abord assurez-vous que le nom d'utilisateur n'est pas vide. Comprenez que sur un site Web, vous ne pouvez pas avoir plusieurs utilisateurs avec le même nom d'utilisateur, de sorte que vous aurez envie de vous assurer que lorsque vous insérez quelque chose dans votre base de données - insérer un nouvel utilisateur - alors vous ne recevez pas une collision entre un nom d'utilisateur préexistant et le nom d'utilisateur que l'utilisateur essaie de se soumettre. Pour cela, une fois que vous exécutez une requête - l'insertion d'un certain utilisateur avec leur mot de passe et un montant initial de trésorerie - une fois que vous appelez cette requête, alors MySQL va réellement retourner false si elle échoue. La structure d'utilisateurs est telle que le nom d'utilisateur est une valeur unique, de sorte que vous ne pouvez pas avoir plus d'un. Lorsque vous essayez d'insérer une nouvelle ligne avec un nom d'utilisateur qui existe déjà, qui va retourner faux - comme une valeur booléenne false valeur. Une chose difficile ici, c'est que vous aurez envie de vérifier si le résultat est le résultat de votre requête. Si elle échoue, alors vous aurez envie de vérifier auprès de l'opérateur triple égal à égal. Cela va vraiment vérifier s'il ya une panne ou non, alors que dans un simple équivaut-égaux, il serait vrai si la ligne était vide. Le résultat d'un échec s'il ya une collision entre noms d'utilisateurs est la valeur réelle faux. Voici comment vous insérer dans une base de données. Voici la requête que vous souhaitez exécuter strictement SQL. Une chose est que vous pouvez réellement aller sur le site qui gère votre base de données SQL et de jouer là-bas en entrant manuellement soit des valeurs ou des lignes. Il va afficher ce que la sortie est SQL. Vous pouvez également exécuter des commandes SQL dans votre base de données  et puis voir ce que la syntaxe pourrait être, et ensuite traduire cela dans la fonction d'interrogation que nous avons en pset 7, qui va être très similaires aux requêtes que vous avez réellement exécutées. Si je voulais insérer une nouvelle ligne dans ma table utilisateurs, alors je vous spécifiez insert into utilisateurs, ce qui est le nom de ma table. Ensuite, je voudrais spécifier les noms de colonnes. Ensuite, je voudrais fournir les valeurs avec mon mot de passe. Les mots de passe des utilisateurs dans notre tableau ne sont pas stockés en tant que juste la chaine. Elles sont stockées en tant que version cryptée, si vous voulez exécuter la fonction crypt sur le mot de passe actuel, et qui vous donnera le bon type de stockage pour l'ensemble des utilisateurs. L'exécution de ce insère une nouvelle ligne dans votre table d'utilisateurs. Pour faire face à la fonction de requête, avant dans C, nous avons utilisé le signe pour cent d'espace réservé. De même, le concept même d'un espace réservé s'applique ici. Avec requête, vous spécifiez la requête entière, sauf lorsque vous avez affaire à des variables comme entrée dans la requête, alors au lieu de les mettre réellement à l'intérieur - comme lorsque nous avions printf en C Nous mettrions la chaîne, puis un espace réservé là-bas, et puis après chaque virgule, spécifier les variables que nous avions. Ici, nous allons utiliser le signe de point d'interrogation que notre espace réservé et ensuite passer à chaque variable, respectivement dans l'ordre, pour les marqueurs - où ces variables devrait aller. Donc, ici, le premier point d'interrogation sera remplacé par le nom d'utilisateur réel puis le point d'interrogation seconde par le mot de passe. Puis, finalement, une fois que vous les avez enregistrées et les ajouter à la base de données, alors vous voulez le connecter sur le site. Nous avons une sorte de super-globale session appelée variable. Session ait une certaine id, et en ce que N correspond à l'utilisateur qui est actuellement connecté Ce que vous voulez faire est de trouver ce que leur nom d'utilisateur est puis définissez l'identifiant de session en tant que id utilisateur particulier. Une fonction que vous souhaitez utiliser ici est une commande SQL qui permet de récupérer le numéro d'identification dernier inséré à partir de votre table. Puis rangées appellera - physique, fera appeler l'id - physique, fera attribuer un nom au numéro qu'elle retourne. Il va appeler cet id. Maintenant que nous avons terminé vous inscrire, et nous pouvons passer à citer. Citation permet à un utilisateur d'entrer le nom d'un certain stock, puis il retournera les qualités de ce stock. Ce que vous voulez faire ici est d'avoir un contrôleur et certains modèles. Dans ce cas, nous allons avoir un contrôleur qui va faire toute la pensée pour nous. Il va rechercher le symbole, puis transmettre des valeurs aux modèles qui seront imprimées sur. Nous allons avoir 2 modèles ici. Nous allons avoir 1 modèle qui fournit la forme sous laquelle les utilisateurs vont saisissez le nom de l'action - le nom de l'action. Ensuite, nous allons aussi veulent un autre modèle qui affiche ces valeurs. Vous pouvez regarder dans de connexion pour un exemple de la façon dont vous avez un formulaire qui accepte une entrée, sauf ici, nous voulons seulement 1 terrain. Nous ne voulons pas d'un nom d'utilisateur et un champ de mot de passe. Nous voulons juste 1 champ texte qui permet à l'utilisateur d'entrer le nom d'un certain stock. Alors, vous voulez envoyer ces données - une fois que vous avez regardé ce stock - à quote_form.php. Lookup retourne le symbole d'un titre, le nom, et un prix. Celles-ci sont contenues dans un tableau associatif. Recherchez la fonction de recherche dans le functions.php pour plus d'informations sur les types de retour des personnes. Super! Alors finalement, vous souhaitez afficher les informations boursières. Vous voulez sans doute afficher - Vous aurez souhaitez accéder à ces variables. Une fois que vous avez le prix dans une variable - ainsi que le nom et le symbole - alors vous aurez envie d'afficher celles de votre modèle de page. Cela page modèle pourrait être appelé show_quote.php ou quelque chose. Votre page quote.php rendrait citation spectacle et passent ensuite dans l'ensemble de ces valeurs. Ensuite, dans votre page php, vous avez réellement imprimer ces valeurs à l'aspect HTML de la page. Il suffit d'utiliser la fonction d'impression et de passer dans le prix. Il ya 2 façons - vous pouvez soit le concaténer avec l'opérateur point, ou utiliser un espace réservé. Les utilisateurs sont finalement va être l'achat et la vente d'actions. Nous voulons leur permettre une certaine façon de voir la totalité des actions qu'ils ont actuellement. Nous allons appeler que leur portefeuille. Portefeuille serait, sans doute pour tous les utilisateurs, contient un tas de lignes indiquant le type d'action qu'ils ont et combien de ceux dont ils disposent. Notre table existante - en ce moment, nous avons une table users dans notre base de données. Qui contient le nom d'utilisateur d'un utilisateur ainsi que leur mot de passe et combien d'argent ils disposent. Il n'y a pas de véritable moyen de stocker l'ensemble de leurs actions dans ce. Ce n'est pas comme on peut insérer de nouvelles colonnes pour chaque stock. Ce serait une ligne très, très longtemps parce que nous avons une quantité infinie des types d'actions qu'ils pourraient avoir. Ainsi, au lieu que nous allons faire est dans la même base de données, nous aurons une table utilisateurs, mais nous aurons aussi une table de portefeuille. Le tableau portefeuille sera certainement liée à la table des utilisateurs, mais au lieu de la structure de la table portefeuille auront les informations boursières, le nombre d'actions de ce stock, l'utilisateur dispose d' ainsi que d'un numéro d'identification de l'utilisateur particulier. Vous avez la table users qui a un id ainsi que le nom d'utilisateur, le hachage - qui est le mot de passe, le mot de passe crypté - puis le montant des liquidités dont ils disposent. Le numéro d'identification serait lié au numéro d'identification du portefeuille. Le portefeuille aurait juste le symbole de l'action ainsi que les actions - le nombre d'actions de ce stock que l'utilisateur possède. Dans ce portfolio table que vous auriez essentiellement toutes les actions possédées par tous les utilisateurs sur votre site. Plus tard, pour préciser que des actions d'un utilisateur de certains - que leur portefeuille - vous pouvez extraire les valeurs de la table de votre portefeuille de telle sorte que le numéro d'identification est spécifique à l'utilisateur. Lorsque vous affichez le portefeuille, vous aurez envie de rapporter chacune des actions en portefeuille d'un utilisateur. Vous aurez envie de rapporter le nombre d'actions et la valeur actuelle de ces actions. Cette valeur actuelle de ces actions ne sont pas stockées dans la table de portefeuille parce que cela va être mise à jour - au minimum - tous les jours par Yahoo. Pour obtenir ces informations, vous ne pouvez pas faire référence à ce à partir de votre requête SQL. Quelle est la fonction prévoit que pour nous? Quelle est la fonction va obtenir le prix? C'est de recherche, donc l'utilisation de recherche sur un symbole particulier vous donnera beaucoup d'informations. Ça va vous donner 3 éléments d'information - le nom, le symbole, ainsi que le prix. Une fois que vous rechercher un certain symbole, alors vous pouvez obtenir le prix, et puis vous pouvez utiliser le prix à afficher dans votre portefeuille. Le portefeuille devrait également afficher solde de trésorerie de l'utilisateur actuel. Ce champ est stockée dans la table des utilisateurs. Alors se rappeler comment nous sommes fondamentalement d'avoir à - nous allons avoir différents types de fichiers PHP. Nous allons avoir un contrôleur qui, fondamentalement, fait tout le penser pour vous. Et puis nous avons un modèle dans lequel le modèle traite de sortie des données. Vous devez penser à ce que les variables du contrôleur aurez besoin de prendre po Si nous avons affaire à un portefeuille qui sort de tout nom, le symbole et le nombre d'actions, ainsi que le prix actuel d'une action, alors vous aurez envie de trouver un moyen de passer au fond - vous pouvez passer un tableau de valeurs qui correspondent. Allons dans un exemple de la façon dont vous pouvez récupérer la totalité des actions appartenant à un utilisateur particulier. Ce ne traite pas - encore - avec le prix de l'action. Que ce serait faire est de lancer une requête. Il serait d'obtenir le symbole ainsi que les actions de - J'appelle ce tableau, mais dans ce cas, quel serait-il? Quel est le nom de la table que nous avons affaire avec ce symbole a et des actions pour un utilisateur particulier? C'est utilisateurs ou de portefeuille. Portefeuille. Que ce serait faire est de portefeuille de requête pour les symboles et les actions pour un utilisateur particulier. Ici, je dis, (symbole SELECT FROM tbl, les actions - mais au lieu de la table, vous allez le remplacer par portefeuille. «Où» est fondamentalement mon état. Je dis que je veux seulement obtenir ces tableaux associatifs qui correspondent  à cette condition suivante - id égal à égal.  Alors je vais mettre un espace réservé là-bas et ensuite l'identifiant de session. Que ce serait faire est de dire pour chaque ligne en rangées. C'est une belle façon au lieu d'avoir à mettre en place une boucle for qui se répète sur tous les index, puis en PHP, vous pouvez avoir une boucle for-each. Si vous avez un tableau donné, alors vous pouvez dire que je vais appeler tous les éléments successifs - Je vais appeler tous les éléments de ce nom. Ainsi, pour chacun de ces éléments, je vais les appeler ainsi, alors je peux le faire. Dans cette opération pour chaque, vous avez rangées comme votre véritable tableau, et chaque ligne que vous allez appeler la ligne. Chaque fois qu'il exécute le corps, il va monter et il mettra à jour la ligne à l'élément suivant en rangées. Maintenant, en ce qui concerne l'achat d'actions, ce que nous voulons faire est d'obtenir le stock que l'utilisateur veut acheter et le nombre d'actions que l'utilisateur souhaite acheter, puis - si elles veulent - ajouter ce stock à leur portefeuille. Évidemment, si ils achètent quelque chose, alors cela va diminuer la quantité d'argent qu'ils ont, ce qui va diminuer leur argent. Nous allons avoir affaire à la mise à jour du portefeuille ainsi que la table des utilisateurs, qui contient de l'argent. Mais d'abord, vous avez besoin pour obtenir le stock réel et le montant des actions que l'utilisateur souhaite. Pour cela, vous aurez besoin d'un formulaire HTML qui vous demandera le symbole de l'action que vous voulez acheter ainsi que le nombre d'actions. Ensuite, vous aurez envie d'ajouter. Vous devrez sélectionner certaines valeurs. Nous avons traversé cela un peu petite déjà, mais quand vous essayez d'obtenir certaines lignes - récupérer certaines lignes de la table SQL, c'est la syntaxe suivante. Vous avez sélectionner, puis si vous spécifiez une étoile, qui va fondamentalement retourner l'ensemble, rangée entière pour vous. Là encore, vous avez la condition où, et puis vous spécifiez - Je veux seulement le nom d'utilisateur pour être égale à la poste, de sorte qu'il ne récupérer la ligne dans les utilisateurs qui correspond à la poste. Quand un utilisateur veut ajouter une part d'un portefeuille, vous devez vérifier quelques erreurs. Vous voulez vous assurer que l'utilisateur peut se permettre le stock, de sorte que vous aurez envie de vérifier leur argent. Avant, nous avons utilisé étoile pour récupérer toute une rangée d'une table SQL. Mais ici, nous pouvons simplement préciser que je ne veux valeur 1 - Je veux seulement en espèces. Donc, ici, il serait de retour l'argent pour l'utilisateur avec numéro d'identification 1. Si un utilisateur a déjà acheté un certain stock, mais achète alors plus de ce stock, puis dans votre portefeuille - vous ne voulez pas une ligne distincte, une autre ligne qui contient cette nouvelle transaction. En fait, vous voulez mettre à jour la quantité. Tout ce qui change vraiment, c'est la quantité d'actions que cet utilisateur possède. Si vous utilisez l'insert dans la requête - si c'est juste insérer dans votre portefeuille toutes ces valeurs - numéro d'identification de l'utilisateur ainsi que le symbole de l'action qu'ils achètent et les actions, alors vous aurez également besoin de préciser, eh bien, si je rencontre un double de la clé - dans ce cas, le double de la clé n'est pas seulement l'utilisateur Identifiant mais aussi le symbole de l'action - parce que vous ne pouvez avoir - notre postulat est que vous ne pouvez avoir 1 rangée  qui correspond à 1 symbole spécifique. Ainsi, sur le double de la clé - si vous avez une collision il ya - vous allez juste de mettre à jour des actions à sa nouvelle valeur. Actions est égal à ce que nous avions avant, plus le nombre d'actions que l'utilisateur achète. Maintenant que nous avons mis à jour la table de portefeuille, Nous allons mettre à jour trésorerie de l'utilisateur. C'est dans la table des utilisateurs, donc nous allons être retranchant un certain montant d'argent. Vraisemblablement, il va être en espèces est moins en espèces - et puis un certain montant. Pour mettre à jour l'argent, vous le feriez - si je voulais prendre de l'argent de la poste, alors je exécuter cette requête - «Utilisateurs» de mise à jour, puis définissez la colonne de cash à cash - Je voudrais supprimer 9.999 dollars seulement si le nom d'utilisateur est égale à la poste. Mais, dans ce cas, nous ne voulons pas de soustraire 9.999 spécifiquement. Nous voulons préciser, eh bien, nous voulons soustraire le prix actuel de l'action multiplié par le nombre d'actions qu'ils achètent. Maintenant, nous avons permis de voir tous les stocks dont ils disposent, ainsi que d'acheter plus de stocks. Nous avons également déjà permis de regarder le prix actuel d'une action. Ici, nous voulons leur permettre de les vendre. D'abord nous voulons afficher en gros - nous voulons leur permettre de voir tous les stocks dont ils disposent, alors voici nous voulons afficher toutes les lignes du portefeuille. S'ils choisissent de vendre un certain stock, alors nous allons supposer qu'ils veulent vendre la totalité de celui-ci. Ils ne vont pas se vendre 50% de leurs actions, ils vont vendre 100% de celui-ci. Nous ne pouvons tout simplement supprimer la ligne entière de portefeuille. Nous pouvons supprimer les actions de la utilisateur donné du symbole certaine. Il ya la syntaxe pour cela. Ensuite, nous voulons mettre à jour la trésorerie. Nous allons ajouter dans la caisse égale à la quantité d'actions qu'ils vendent multiplié par le prix actuel de l'action - pas le prix auquel ils l'ont acheté, mais le prix auquel ils sont - le prix actuel quand ils le vendent. Pour référencer le prix actuel d'une action, vous souhaitez utiliser de recherche, qui vous donnera le prix d'une action à l'heure actuelle. Maintenant, on se retrouve avec l'histoire, laquelle vous voulez permettre à un utilisateur de garder une trace de toutes leurs transactions - veut voir quand ils ont vendu quelque chose, quand ils ont acheté un stock. Nous voulons préciser la date à laquelle ils l'ont fait aussi bien que combien ils ont acheté et ce stock était. Avons-nous, de la structure existante qui précise que? Eh bien, nous avons portefeuille qui affiche les stocks nombre que l'utilisateur a pour une action donnée. Mais nous structuration de portefeuille dans la façon dont il met à jour lorsque nous achetons multiple, tandis que l'histoire devrait - si vous achetez Apple, 10 actions de celui-ci, et puis plus tard sur la vente 5, alors vous voulez voir ceux séparément comme des actions distinctes, des lignes séparées. Attendu que l'action de visualiser que dans notre portfolio table serait tout simplement une mise à jour de cette ligne particulière,  donc nous allons probablement vouloir une autre table. Dans notre base de données, nous avons notre table des utilisateurs, nous avons notre table de portefeuille, et maintenant nous allons probablement besoin d'un tableau de l'histoire. Ce tableau histoire peut garder la trace de la date du jour, ainsi que le symbole boursier particulier, ainsi que le nombre d'actions, et puis quelle mesure il est - si vous achetiez ces actions ou si vous les vendez. Pour faire face à ce jour, il ya un couple de façons que vous pouvez faire cela. PHP dispose d'un moyen de garder la trace de ce jour, que vous pouvez regarder vous-même. En SQL, vous pouvez également utiliser maintenant ou timestamp courant. C'est à vous. Assurez-vous que chaque fois qu'un utilisateur achète ou vend, vous serez la mise à jour de leur trésorerie dans la table des utilisateurs, vous serez mise à jour des lignes dans la table portefeuilles, alors vous aurez également la mise à jour de l'histoire, donc il va y avoir 3 différentes requêtes SQL que vous serez y faisant escale. Nous avons un tas de fonctionnalités maintenant. Juste quelques rappels dans votre fichier d'index, vous aurez envie de mettre un lien vers au moins votre - mais vous voulez permettre à un utilisateur d'un lien vers la page buy.php. Cela va permettre à un utilisateur - buy.php est le contrôleur, donc qui va soit vous envoyez à - ça va vous envoyer à la forme qui vous permet de regarder les choses en place. Nous avons une histoire. Nous avons la déconnexion, obtenir un devis pour les revendre ensuite. Ce sont au minimum ce que vous voulez montrer. En termes de portefeuille, le portefeuille est effectivement indiqué dans la page d'index. Si nous passons à l'index, nous voyons ici qu'il rend portfolio.php et passe dans le tableau associatif - en gros le titre est égal portefeuille. Donc, c'est le contrôleur. Si nous allons au modèle de portfolio.php, alors tout ce qu'il a est - essentiellement affiche une image qui dit, oh, ce site est en construction. Plus tard, une fois que vous passez - vous en aurez sera de passage dans l'information fondamentalement plus spécifique. Au lieu de simplement le titre, vous serez probablement en passant plus de choses. Une fois que vous avez ces valeurs, alors portfolio.php peut faire face à ces valeurs et de les imprimer dans un ordre quelconque. Une fois que vous avez appliqué l'ensemble de ceux-ci, vous devez également mettre en œuvre option 1 plus. Cela peut être permettant à un utilisateur de changer son mot de passe, de réinitialiser leur mot de passe si ils l'ont oublié - si le nouveau mot de passe, puis vous voudrez probablement aussi d'éditer vous inscrire afin que cela leur permet de spécifier un email, donc si ils oublient leur mot de passe, ils peuvent l'obtenir. Ils peuvent probablement entrer son nom d'utilisateur, puis un email vous sera envoyé pour les avec un lien pour être en mesure de réinitialiser leur mot de passe. Vous pouvez avoir quelque chose qui permet aux utilisateurs d'obtenir des reçus chaque fois qu'ils achètent ou vendent quelque chose, et enfin, leur permettre d'ajouter de l'argent à leur site Web. Pour en revenir à la notion de contrôleurs et des modèles un peu. Vous aurez quelque chose comme un - si vous avez un contrôleur ici. À l'heure actuelle, nous nous penchons sur l'exemple login.php. Lorsque nous avons un contrôleur, fondamentalement, il va prendre 2 cas. Lorsque nous avons des contrôleurs, nous sommes dans cette pièce que nous sommes aussi un peu face à lorsque nous avons des formes aussi. Le contrôleur avez essentiellement des actions distinctes - un si un formulaire a déjà été soumis, puis deux, si l'utilisateur arrive à cette page pour la première fois et reste à cette forme d'entrée. Je vais passer directement à la première affaire avant de monter dans le premier cas, d'avoir la forme po Ici nous disons, si le formulaire a été soumis avec la méthode POST - ne vous inquiétez pas à ce sujet un peu. Ne vous inquiétez pas trop, mais comprenez que, fondamentalement, cette fonction traite si un formulaire a été envoyé ou non. Cette condition est vraie si un utilisateur a soumis le formulaire. Si non, alors nous allons vouloir appeler login_form.php rendu, puis passer dans le titre. Ce titre est en fait juste va apparaître dans l'en-tête. Que cela ne se dit essentiellement, d'accord - ainsi, si un utilisateur se rend à login.php et n'a pas effectivement connecté, alors je veux pas les renvoyer à la page qui a cette forme ce qui leur permet d'entrer le nom d'utilisateur et le mot de passe. Ensuite je vais à login_form, puis qui a la forme réelle. Puis, une fois que l'utilisateur envoie cette forme, ils vont le soumettre à login.php avec le poste de procédé. Ensuite, je vais en fait entrer dans cette section de mon if-else boucle. Alors, c'est ici que nous traitons avec les valeurs entrées dans le formulaire. C'est ici que nous traitons avec ceux-ci. Puis, une fois que vous infligez avec ces valeurs - si vous faites affaire avec - dire que nous avons affaire à la page quote.php où quelqu'un peut entrer un stock qui ils veulent regarder, et puis voir ce que l'affichage - c'est le genre de semblable ici. Ici, nous avons un formulaire de connexion - it! Probablement un formulaire de devis - mais une fois que l'utilisateur a fait valoir que l'information, alors vous voudrez le contrôleur de passer dans un autre modèle que va leur montrer que l'information réelle. Donc, puis à droite ici, alors vous aurez sans doute - vers la fin de votre état ici - le cas la méthode equals post - alors vous aurez probablement envie de restituer une autre page - la citation show - qui vous envoie vers cette page - show_quote.php-- puis en ce que le fichier se référencer ces valeurs. Est-ce logique? Nous avons un contrôleur qui traite essentiellement avec les 2 cas - si vous avez entré un formulaire ou non. Si vous n'avez pas entré un formulaire, alors il vous redirigera vers cette forme, ce qui vous mettrons ensuite revenir à cette page. Puis, une fois que vous avez des informations sur le contrôleur, ce corps sera face à cette informations nécessaires - soit à la recherche des valeurs pour le stock, et puis une fois qu'il a regardé ces valeurs et les a dans un tableau bien formaté, alors peut passer ce tableau dans la page de modèle  qui traite de la sortie que de l'information. Encore une fois, depuis son web, ça va être amusant. Nous sommes à l'extérieur de C, de sorte que nous ne sommes pas limités à l'ASCII et que la borne de sortie, alors amusez-vous avec cela. Vous pouvez le faire aussi visuelle que vous le souhaitez. Vous pouvez autoriser les utilisateurs à des millions de dollars d'entrée à la fois, ou de les limiter et être vraiment dire et de leur permettre seulement de saisir 1 penny à un moment ou quelque chose comme ça. Certainement assurez-vous d'avoir du plaisir avec ça. Le code PHP est un peu plus simple en ce qu'elle est un peu plus facile de tracer votre pseudo dans la mise en œuvre effective. Donc, certainement s'amuser avec cela parce que c'est en fait notre dernière pièce CS50. Avec ça, c'était Procédure pas à pas 7. Une fois que vous avez fini de regarder la procédure pas à pas et terminé votre pset, alors ceux-ci étaient également psets, et maintenant nous sommes sur le produit final - après que nous obtenons grâce quiz 1. Alors j'espère que vous pouvez utiliser les outils que vous avez tirés des psets - non seulement la syntaxe, mais plus la notion abstraite de la façon de prendre un certain - veux, je veux faire ça et puis effectivement mise en œuvre de ça. Apprendre à lutter à travers la syntaxe et le code de distribution. Lecture code d'autres personnes, puis l'interprétation que l'utilisation de fonctions pré-existantes. Alors, bonne chance avec le pset dernier. Cela a été un plaisir de diriger les procédures pas à pas. J'espère qu'ils ont été utiles pour vous. Ceux-ci étaient Procédures pas à pas, et merci beaucoup. [CS50.TV]