1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [Semaine 8, suite] 2 00:00:02,000 --> 00:00:04,000 [David J. Malan] [Université de Harvard] 3 00:00:04,000 --> 00:00:08,000 [C'est CS50.] [CS50.TV] 4 00:00:08,000 --> 00:00:13,000 >> C'est CS50, c'est donc la fin de la semaine 8 ici. 5 00:00:13,000 --> 00:00:16,000 Nous avons bien sûr eu un peu d'un ouragan plus tôt cette semaine, 6 00:00:16,000 --> 00:00:19,000 alors maintenant il est vraiment juste toi et moi dans cette salle de conférence, 7 00:00:19,000 --> 00:00:22,000 mais aujourd'hui, nous continuons notre conversation à propos de PHP 8 00:00:22,000 --> 00:00:25,000 et à propos de la programmation web, plus généralement, et nous avons également introduire l'idée 9 00:00:25,000 --> 00:00:29,000 des bases de données, en particulier celui qui est appelé MySQL, qui est très populaire ces jours-ci, 10 00:00:29,000 --> 00:00:34,000 en grande partie en raison de son évolutivité et aussi parce que son être libre et open source. 11 00:00:34,000 --> 00:00:37,000 >> Mais d'abord, regardons où nous nous étions arrêtés la dernière fois. 12 00:00:37,000 --> 00:00:40,000 Rappelez-vous que nous regardions les exemples de plusieurs messages instantanés Frosh, 13 00:00:40,000 --> 00:00:44,000 et ce fut la forme hideuse que je suis venu avec quelques 15 + ans 14 00:00:44,000 --> 00:00:49,000 dans le but d'amener les élèves sur le campus registre pour les sports intra-muros de première année 15 00:00:49,000 --> 00:00:52,000 sans avoir à trek plus dans la cour de Wigglesworth 16 00:00:52,000 --> 00:00:56,000 de glisser un morceau de papier physique sous la porte quelques-uns de surveillant. 17 00:00:56,000 --> 00:00:59,000 Au lieu de cela nous avons déménagé tout en ligne, mais pour cela nous avons besoin de faire usage 18 00:00:59,000 --> 00:01:03,000 de quelques technologies, ainsi on, nous avions besoin de HTML, Hypertext Markup Language, 19 00:01:03,000 --> 00:01:07,000 ce qui est nouveau cette langage de balisage avec lequel vous faites des pages Web structurellement. 20 00:01:07,000 --> 00:01:10,000 >> En utilisant un peu de CSS ces jours-ci, les feuilles de style en cascade, 21 00:01:10,000 --> 00:01:16,000 où nous utilisons stylisations de la page Web en utilisant une syntaxe légèrement différente, 22 00:01:16,000 --> 00:01:19,000 tandis que le HTML a été tout au sujet de la structure de celle-ci. 23 00:01:19,000 --> 00:01:21,000 Nous devons également mettre en place un langage de programmation web. 24 00:01:21,000 --> 00:01:25,000 Dans ce cas, nous allons utiliser PHP et PHP va nous permettre 25 00:01:25,000 --> 00:01:28,000 le contenu dynamique de sortie ainsi que faire des choses comme programmatiques 26 00:01:28,000 --> 00:01:33,000 l'envoi de courriels, comme c'était le cas sur la note que nous a quitté la semaine dernière. 27 00:01:33,000 --> 00:01:35,000 >> Rappelons que le code de cette était en 2 parties. 28 00:01:35,000 --> 00:01:38,000 Un, nous avons eu froshims3.php, 29 00:01:38,000 --> 00:01:42,000 et ce fut en grande partie le balisage d'un formulaire HTML à l'intérieur de celui-ci, 30 00:01:42,000 --> 00:01:45,000 un petit peu de CSS ici dans les attributs de style 31 00:01:45,000 --> 00:01:48,000 de sorte que la forme elle-même serait centrée sur la page, mais au-delà 32 00:01:48,000 --> 00:01:51,000 nous avons eu quelques données du formulaire représentatifs, un champ de texte, une case à cocher, 33 00:01:51,000 --> 00:01:55,000 certains boutons radio, un menu de sélection et un bouton submit. 34 00:01:55,000 --> 00:02:01,000 Et via ce formulaire, nous avons soumis à un fichier qui a été apparemment appelé register3.php, 35 00:02:01,000 --> 00:02:04,000 qui lui-même avait l'air un petit quelque chose comme ça. 36 00:02:04,000 --> 00:02:08,000 Maintenant, la plupart du code dans register3.php, rappel, était tout au sujet de courriel. 37 00:02:08,000 --> 00:02:11,000 Il fait un peu de la validation du formulaire qui a été lancée afin de s'assurer 38 00:02:11,000 --> 00:02:14,000 que les champs ont été effectivement fournis qui étaient attendus. 39 00:02:14,000 --> 00:02:18,000 Ensuite, nous avons appelé des fonctions PHP en utilisant la nouvelle syntaxe légèrement, 40 00:02:18,000 --> 00:02:20,000 même si elle est empruntée à C. 41 00:02:20,000 --> 00:02:24,000 >> Cet opérateur flèche qui nous permet de faire usage de ce qu'on appelle la programmation orientée objet. 42 00:02:24,000 --> 00:02:27,000 Nous n'allons pas entrer dans les détails ici en détail, mais je sais pour l'instant 43 00:02:27,000 --> 00:02:31,000 c'est une façon d'avoir des fonctions associées aux objets, 44 00:02:31,000 --> 00:02:34,000 qui sont un type particulier de structure, comme nous l'avons vu dans C. 45 00:02:34,000 --> 00:02:37,000 Mais pour l'instant, il suffit de prendre sur la foi que c'est la syntaxe correcte à utiliser 46 00:02:37,000 --> 00:02:41,000 lorsque vous utilisez une bibliothèque comme cette bibliothèque PHPMailer. 47 00:02:41,000 --> 00:02:44,000 Et puis à la fin de ce fichier que nous avions généré dynamiquement un e-mail 48 00:02:44,000 --> 00:02:47,000 qui se sont adressé à mon compte jharvard@cs50.net 49 00:02:47,000 --> 00:02:50,000 à partir de mon compte jharvard@cs50.net, 50 00:02:50,000 --> 00:02:54,000 et nous avons informé l'utilisateur en conséquence qu'elles avaient été enregistrés pour ce sport. 51 00:02:54,000 --> 00:02:57,000 C'est à peu près ce que le site Frosh IM fait pendant toutes ces années 52 00:02:57,000 --> 00:03:00,000 quand je l'ai mis en place, d'accord, dans une langue différente, 53 00:03:00,000 --> 00:03:02,000 mais il vous montre peut-être le pouvoir que vous avez 54 00:03:02,000 --> 00:03:05,000 maintenant que vous pouvez vous exprimer non seulement par programmation 55 00:03:05,000 --> 00:03:08,000 à un niveau faible dans un langage comme C, mais à un niveau beaucoup plus élevé 56 00:03:08,000 --> 00:03:11,000 avec ces applications dans le monde réel comme très courriel à fait résoudre 57 00:03:11,000 --> 00:03:13,000 certains problèmes du monde réel. 58 00:03:13,000 --> 00:03:16,000 >> Maintenant, bien sûr, même si je utiliser ce script pour générer des 59 00:03:16,000 --> 00:03:20,000 e-mails de façon dynamique à partir jharvard@cs50.net, qui est en fait un compte 60 00:03:20,000 --> 00:03:23,000 que j'ai accès à, ne faire très attention à envoyer 61 00:03:23,000 --> 00:03:26,000 seulement le courrier des comptes qui sont en fait le vôtre, 62 00:03:26,000 --> 00:03:30,000 de peur que les choses que vous obtenez dans un peu d'eau chaude dans la vie. 63 00:03:30,000 --> 00:03:35,000 Cela dit, nous allons maintenant la transition vers la résolution d'un problème tout à fait différent, 64 00:03:35,000 --> 00:03:37,000 celle des États retenue. 65 00:03:37,000 --> 00:03:39,000 Maintenant, qu'est-ce que cela signifie réellement? 66 00:03:39,000 --> 00:03:42,000 HTTP, le protocole de transfert hypertexte, 67 00:03:42,000 --> 00:03:45,000 est en fait un protocole sans état, et ce que cela signifie, c'est que 68 00:03:45,000 --> 00:03:48,000 lorsque vous tirez quelque chose comme Google.com, puis appuyez sur Entrée 69 00:03:48,000 --> 00:03:51,000 généralement votre navigateur a une sorte d'icône qui tourne alors 70 00:03:51,000 --> 00:03:54,000 résultats dans une page web en cours de téléchargement, 71 00:03:54,000 --> 00:03:57,000 et puis cette petite icône s'arrête de tourner, et cela suggère en effet 72 00:03:57,000 --> 00:04:02,000 que HTTP a terminé une sorte de connexion au serveur et c'est tout. 73 00:04:02,000 --> 00:04:05,000 HTTP est apatride, dans le sens qu'elle ne tient pas 74 00:04:05,000 --> 00:04:08,000 une connexion persistante au serveur dans le même Skype ne 75 00:04:08,000 --> 00:04:11,000 ou GChat fait car avec HTTP 76 00:04:11,000 --> 00:04:15,000 l'hypothèse est qu'une fois que vous avez récupéré une page web c'est tout. 77 00:04:15,000 --> 00:04:18,000 >> Maintenant, dans la réalité de nos jours sur des sites comme Facebook et Google Maps 78 00:04:18,000 --> 00:04:21,000 et de Twitter et comme il ya beaucoup plus de dynamisme par lequel 79 00:04:21,000 --> 00:04:25,000 même après que l'icône s'arrête de tourner, vous pouvez en fait obtenir plus de mises à jour 80 00:04:25,000 --> 00:04:29,000 à partir du serveur, plus de tweets, mises à jour de statut sur Facebook et autres etc. 81 00:04:29,000 --> 00:04:33,000 Mais même cela est en utilisant une technique que nous allons parler dans une semaine ou deux 82 00:04:33,000 --> 00:04:36,000 connu sous le nom Ajax en utilisant un langage appelé JavaScript, 83 00:04:36,000 --> 00:04:38,000 mais à la fin de la journée, HTTP est toujours sans état. 84 00:04:38,000 --> 00:04:42,000 Et pourtant, si vous voulez quelque sorte se souvenir des choses au sujet d'un utilisateur 85 00:04:42,000 --> 00:04:44,000 même après avoir déconnecté de votre serveur 86 00:04:44,000 --> 00:04:47,000 PHP ne vous donner un moyen de le faire 87 00:04:47,000 --> 00:04:52,000 parce que, comme nous l'avons vu la dernière fois, PHP dispose d'un certain nombre de superglobals, 88 00:04:52,000 --> 00:04:55,000 et superglobale est, encore une fois, une variable globale spéciale 89 00:04:55,000 --> 00:04:59,000 qui est remise par le serveur web et PHP par lui-même. 90 00:04:59,000 --> 00:05:02,000 >> Vous n'avez pas à faire quelque chose pour mettre les valeurs en elle, 91 00:05:02,000 --> 00:05:05,000 et parmi les super-globales que nous avons vu jusqu'à présent sont GET et POST, 92 00:05:05,000 --> 00:05:08,000 qui est l'endroit où les champs du formulaire sont mises automatiquement pour vous, 93 00:05:08,000 --> 00:05:11,000 ainsi que quelques autres que nous n'avons pas encore vu. 94 00:05:11,000 --> 00:05:17,000 A l'intérieur de $ _SERVER sont des variables spéciales relatives au serveur lui-même. 95 00:05:17,000 --> 00:05:22,000 Quelle est l'adresse IP, ce protocole HTTP ou HTTPS avez-vous utilisé, 96 00:05:22,000 --> 00:05:25,000 quelle méthode avez-vous utilisé la demande et autres, donc il ya des choses intéressantes, 97 00:05:25,000 --> 00:05:29,000 détails croustillants sur le serveur, et en fait, l'utilisateur il ainsi. 98 00:05:29,000 --> 00:05:33,000 Il ya $ _COOKIE, qui est l'endroit où ces choses appelées cookies sont stockés. 99 00:05:33,000 --> 00:05:36,000 Nous ne nous attarderons pas sur les cookies eux-mêmes aujourd'hui, 100 00:05:36,000 --> 00:05:40,000 mais je sais pour l'instant qu'un cookie est juste un petit morceau d'information 101 00:05:40,000 --> 00:05:43,000 qu'un serveur web peut planter sur un navigateur 102 00:05:43,000 --> 00:05:46,000 et à son tour sa RAM ou le disque dur de son ordinateur 103 00:05:46,000 --> 00:05:49,000 pour stocker des informations sur un utilisateur, par exemple, leur nom d'utilisateur 104 00:05:49,000 --> 00:05:52,000 de sorte qu'ils n'ont pas à le saisir à chaque fois qu'ils se connectent ou une 105 00:05:52,000 --> 00:05:55,000 numéro unique d'identification ou de l'utilisateur 106 00:05:55,000 --> 00:05:58,000 de sorte que vous n'avez pas à les harceler avec les mêmes types de questions au sujet de 107 00:05:58,000 --> 00:06:00,000 préférences à l'avenir, mais la plupart d'intérêt 108 00:06:00,000 --> 00:06:02,000 en ce moment est de $ _SESSION. 109 00:06:02,000 --> 00:06:07,000 >> Cette superglobale, qui, comme les autres, est remis automatiquement par PHP 110 00:06:07,000 --> 00:06:10,000 lorsque vous écrivez des sites web PHP 111 00:06:10,000 --> 00:06:13,000 peut stocker tout ce que vous voulez, les chaînes, les entiers, 112 00:06:13,000 --> 00:06:16,000 flottants, des valeurs, des tableaux, des objets, 113 00:06:16,000 --> 00:06:20,000 vraiment tout ce que vous voulez, et il vous permet de stocker de manière 114 00:06:20,000 --> 00:06:23,000 que même si l'utilisateur vient vous rendre visite de temps en temps 115 00:06:23,000 --> 00:06:26,000 revient une minute à partir de maintenant ou à 5 minutes à partir de maintenant parce que 116 00:06:26,000 --> 00:06:28,000 ils prennent leur temps avant de cliquer sur un autre lien 117 00:06:28,000 --> 00:06:32,000 PHP va assurer que ce que vous mettez dans ce que superglobale séance 118 00:06:32,000 --> 00:06:37,000 quelques minutes ou 5 minutes il ya seront toujours là lorsque l'utilisateur revient. 119 00:06:37,000 --> 00:06:40,000 Et sous le capot de cette superglobale est mis en œuvre par le biais de 120 00:06:40,000 --> 00:06:44,000 ces choses appelées cookies, mais pour l'instant, c'est juste une abstraction 121 00:06:44,000 --> 00:06:47,000 où c'est un peu l'équivalent programmatique d'un panier d'achat. 122 00:06:47,000 --> 00:06:50,000 Quoi que vous, le programmeur, mis dans cette 123 00:06:50,000 --> 00:06:53,000 superglobale tableau associatif sera là un certain nombre de minutes plus tard, 124 00:06:53,000 --> 00:06:59,000 jusqu'à ce que vous le supprimiez ou jusqu'à ce que l'utilisateur quitte son navigateur totalement. 125 00:06:59,000 --> 00:07:02,000 >> Jetons un coup d'oeil à un exemple de la façon dont cette chose est réellement utilisée. 126 00:07:02,000 --> 00:07:07,000 En counter.php entre morceaux d'aujourd'hui de code 127 00:07:07,000 --> 00:07:09,000 nous avons la ligne suivante. 128 00:07:09,000 --> 00:07:13,000 Au début de ce dossier, nous avons un tas de commentaires bleus, qui sont sans intérêt pour le moment. 129 00:07:13,000 --> 00:07:15,000 Mais à la ligne 13, nous avons une nouvelle ligne, 130 00:07:15,000 --> 00:07:18,000 session_start, et qui ne fait exactement ce qu'il dit. 131 00:07:18,000 --> 00:07:20,000 Il commence sessions. 132 00:07:20,000 --> 00:07:25,000 Il vous permet d'utiliser ce gros superglobale $ _SESSION, et c'est aussi simple que cela. 133 00:07:25,000 --> 00:07:30,000 Maintenant, si nous procédons à regarder à la ligne 16, nous allons essayer de comprendre ce que cette page web va faire. 134 00:07:30,000 --> 00:07:35,000 If (isset ($ _SESSION ["compteur"]), puis aller de l'avant 135 00:07:35,000 --> 00:07:39,000 et stocker dans la variable compteur, compteur minuscules, 136 00:07:39,000 --> 00:07:42,000 $ _SESSION ["Compteur"]. 137 00:07:42,000 --> 00:07:45,000 Cela semble être la déclaration d'une variable locale appelée contre- 138 00:07:45,000 --> 00:07:48,000 à l'intérieur de laquelle elle est mise une copie de tout ce qui est à l'intérieur de la super- 139 00:07:48,000 --> 00:07:52,000 appelé session à l'emplacement «contre». 140 00:07:52,000 --> 00:07:56,000 Sinon, apparemment, ce petit compteur de variable locale, est initialisée à 0. 141 00:07:56,000 --> 00:08:01,000 >> Mais alors, quelques lignes plus loin dans 26 préavis que la copie de la session de compteur, 142 00:08:01,000 --> 00:08:06,000 la clé, a une valeur assignée nouvelle qui est la valeur actuelle de plus 1. 143 00:08:06,000 --> 00:08:09,000 En bref, ce fichier semble être la mise à jour 144 00:08:09,000 --> 00:08:13,000 un compteur qui est stocké à l'intérieur de la super session de 145 00:08:13,000 --> 00:08:16,000 en l'incrémentant de 1, mais il conserve une première copie de la valeur précédente 146 00:08:16,000 --> 00:08:20,000 en le stockant dans une variable locale appelée $ compteur, 147 00:08:20,000 --> 00:08:22,000 et puis ici nous allons voir ce qu'il en reste. 148 00:08:22,000 --> 00:08:24,000 Il s'avère que c'est à peu près juste HTML. 149 00:08:24,000 --> 00:08:29,000 Au bas de cette page, nous voyons dans la ligne 37 que j'ai visité ce site 150 00:08:29,000 --> 00:08:33,000 numéro du compteur de temps, donc il ya un couple d'fonctionnalités intéressantes ici. 151 00:08:33,000 --> 00:08:36,000 Un, il s'agit clairement d'une variable, mais il ne suffit pas de simplement mettre 152 00:08:36,000 --> 00:08:39,000 $ Compteur dans le corps de votre code HTML, car bien sûr, 153 00:08:39,000 --> 00:08:43,000 si c'est juste là, au milieu de votre PHP HTML va supposer que c'est juste HTML. 154 00:08:43,000 --> 00:08:48,000 Vous voulez littéralement $ compteur à imprimer sur l'écran. 155 00:08:48,000 --> 00:08:51,000 >> Mais au lieu de tomber dans le mode PHP 156 00:08:51,000 --> 00:08:55,000 avec ce morceau de syntaxe, nous pouvons insérer dynamiquement une valeur ici 157 00:08:55,000 --> 00:08:58,000 très semblable dans l'esprit à ce que nous avons fait la dernière fois avec 158 00:08:58,000 --> 00:09:00,000 l'insertion de valeurs dans des chaînes. 159 00:09:00,000 --> 00:09:04,000 En fait, c'est juste une notation abrégée pour dire quelque chose comme cela à la lettre, 160 00:09:04,000 --> 00:09:12,000 print ($ compteur) ou même quelque chose comme printf (% s, comptoir) 161 00:09:12,000 --> 00:09:14,000 ou même, comme vous avez pu le voir en ligne ou dans les manuels, 162 00:09:14,000 --> 00:09:17,000 il ya une fonction en PHP appelé écho 163 00:09:17,000 --> 00:09:20,000 qui fait la même chose, et tous ceux qui sont simplement des façons plus prolixes 164 00:09:20,000 --> 00:09:25,000 de dire 00:09:28,000 Dans ce cas, on vous n'avez pas besoin de mettre 166 00:09:28,000 --> 00:09:30,000 PHP mot après le point d'interrogation. 167 00:09:30,000 --> 00:09:34,000 C'est notation abrégée pour, encore une fois, ce que nous venons de le voir il ya un instant 168 00:09:34,000 --> 00:09:37,000 qui se fait l'écho de la valeur. 169 00:09:37,000 --> 00:09:39,000 >> Voyons voir ce que le résultat final de ceci est réellement. 170 00:09:39,000 --> 00:09:43,000 Permettez-moi de passer en revue dans notre fichier counter.php, 171 00:09:43,000 --> 00:09:47,000 et nous allons voir ce que David fait une erreur en jouant avec le code là-bas. 172 00:09:47,000 --> 00:09:50,000 Allons-y tout ce qu'il fixe vissé vers le haut, 173 00:09:50,000 --> 00:09:54,000 et l'erreur semble être là, disparu, à la ligne 37. 174 00:09:54,000 --> 00:09:59,000 Selon le haut de cette page, j'ai visité ce site 0 fois. 175 00:09:59,000 --> 00:10:02,000 Eh bien, allons-y maintenant, et dans la partie supérieure du navigateur cliquez sur le 176 00:10:02,000 --> 00:10:05,000 recharger icône, et je clique sur recharger, 177 00:10:05,000 --> 00:10:12,000 et maintenant, j'ai visité le site 1 fois, 2, 3, 4, 5, 6, 7, 8. 178 00:10:12,000 --> 00:10:16,000 Et en effet, si l'on regarde à la source de cette page le code source est en mutation, 179 00:10:16,000 --> 00:10:19,000 et noter l'absence totale de toute PHP, et c'est parce que 180 00:10:19,000 --> 00:10:23,000 Code PHP est évaluée ou interprété côté serveur, 181 00:10:23,000 --> 00:10:27,000 et si cela signifie que la sortie du script PHP, c'est ce qui en fin de compte envoyé au navigateur, 182 00:10:27,000 --> 00:10:31,000 qui dans ce cas est certaine HTML brut et du texte brut. 183 00:10:31,000 --> 00:10:33,000 Qu'est-ce qui se passe ici? 184 00:10:33,000 --> 00:10:37,000 >> Eh bien, avec relativement peu de lignes de code je suis capable de stocker 185 00:10:37,000 --> 00:10:40,000 constamment au cours de plusieurs secondes, ou si nous avons attendu assez longtemps, 186 00:10:40,000 --> 00:10:44,000 minutes, voire quelques heures, une certaine valeur dans une manière qui rend HTTP 187 00:10:44,000 --> 00:10:47,000 semblent stateful comme si nous avons conservé 188 00:10:47,000 --> 00:10:51,000 cette connexion au serveur, et il est juste de rappeler ce que j'ai dit la dernière fois, 189 00:10:51,000 --> 00:10:55,000 mais en réalité, il ya tout un tas de complexité se passe sous le capot 190 00:10:55,000 --> 00:10:59,000 impliquant les cookies qui est PHP permettant de me donner cette illusion 191 00:10:59,000 --> 00:11:02,000 de ce panier-comme fonction. 192 00:11:02,000 --> 00:11:05,000 Pour l'instant, un exemple trivial où nous sommes juste stocker un nombre entier, 193 00:11:05,000 --> 00:11:08,000 mais cette fonction ne reviendra être d'une grande valeur 194 00:11:08,000 --> 00:11:10,000 quand on commence à parler des projets plus complexes, 195 00:11:10,000 --> 00:11:12,000 parmi eux problème posé 7. 196 00:11:12,000 --> 00:11:16,000 C'est votre problème tout dernier mis en CS50. 197 00:11:16,000 --> 00:11:19,000 Je sais, c'est tellement triste, mais ce que vous trouverez, c'est que nous allons conclure 198 00:11:19,000 --> 00:11:22,000 cette partie de la session par le fait la transition 199 00:11:22,000 --> 00:11:25,000 du contexte de C certainement le contexte de PHP 200 00:11:25,000 --> 00:11:27,000 mais en utilisant certains des principes fondamentaux mêmes 201 00:11:27,000 --> 00:11:29,000 Nous avons parlé pendant un certain temps. 202 00:11:29,000 --> 00:11:33,000 >> L'objectif de pset 7 est de mettre en œuvre CS50 Finances, 203 00:11:33,000 --> 00:11:37,000 qui est votre propre version de Yahoo Finance ou Google Finance 204 00:11:37,000 --> 00:11:40,000 ou même Etrade.com lequel vous avez la possibilité de 205 00:11:40,000 --> 00:11:43,000 consulter les cours des actions des symboles donnés, mais encore plus que cela 206 00:11:43,000 --> 00:11:48,000 vous avez la possibilité d '«acheter» et «vendre» les stocks 207 00:11:48,000 --> 00:11:51,000 qui sont négociés sur les places boursières différentes parce que cette page d'accueil 208 00:11:51,000 --> 00:11:55,000 suggère ici, ce qui est vraiment dans la mesure où nous avons commencé 209 00:11:55,000 --> 00:11:59,000 l'ensemble problème pour vous, vous avez un formulaire de connexion qui est demandant un nom d'utilisateur et un mot de passe. 210 00:11:59,000 --> 00:12:03,000 Il a un bouton submit, mais par la suite, comme nous allons le voir finalement, 211 00:12:03,000 --> 00:12:06,000 il n'y a rien qui se passe vraiment sous le capot encore parce qu'il 212 00:12:06,000 --> 00:12:09,000 vous reste plus qu'à mettre en œuvre la possibilité d'enregistrer de nouveaux utilisateurs, 213 00:12:09,000 --> 00:12:12,000 la capacité d'acheter des actions, de vendre des actions, 214 00:12:12,000 --> 00:12:14,000 effectivement regarder les cours actuels. 215 00:12:14,000 --> 00:12:17,000 >> Et en effet, ce sera aussi le monde réel que possible parce que nous avons fait 216 00:12:17,000 --> 00:12:20,000 inclure un morceau de code qui vous permettra avec une seule fonction 217 00:12:20,000 --> 00:12:25,000 d'interroger Yahoo Finance, ce qui rend merveilleusement disponibles les données gratuites 218 00:12:25,000 --> 00:12:31,000 pour rechercher des prix des actions fondées sur le symbole ou symbole, 219 00:12:31,000 --> 00:12:34,000 et vous remettre le prix actuel du stock de la journée. 220 00:12:34,000 --> 00:12:37,000 Les données que vous êtes en train de voir dans ce pset particulière sera 221 00:12:37,000 --> 00:12:40,000 à peu près aussi réel comme il peut faire de sorte que vous êtes en train de l'interface 222 00:12:40,000 --> 00:12:43,000 avec des stocks mondiaux, les prix réels du monde réel, 223 00:12:43,000 --> 00:12:47,000 et nous verrons combien d'argent vous pouvez faire peut-être 224 00:12:47,000 --> 00:12:51,000 au cours des prochains jours, de jouer avec votre propre problème ensemble. 225 00:12:51,000 --> 00:12:55,000 >> Mais nous allons d'abord préparer le terrain pour la façon de concevoir quelque chose qui est certainement plus compliqué 226 00:12:55,000 --> 00:12:59,000 que counter.php, c'est plus compliqué que l'un des exemples instantanés Frosh à ce jour, 227 00:12:59,000 --> 00:13:02,000 et nous allons essayer d'introduire quelques paradigmes ici qui nous permettent 228 00:13:02,000 --> 00:13:06,000 à la fois pour pset 7 et peut-être pour votre projet final si vous faites quelque chose basé web 229 00:13:06,000 --> 00:13:11,000 de garder votre code bien organisé, pour vous tenir sain d'esprit, 230 00:13:11,000 --> 00:13:15,000 et de faire un pas vers la collaboration, que ce soit dans le projet final CS50 231 00:13:15,000 --> 00:13:18,000 ou au-delà si vous continuez à programmer quelque chose dans l'avenir. 232 00:13:18,000 --> 00:13:21,000 Il ya ce paradigme de conception générale 233 00:13:21,000 --> 00:13:24,000 en informatique et en développement de logiciels plus généralement 234 00:13:24,000 --> 00:13:27,000 connu sous le nom MVC, Model View Controller, 235 00:13:27,000 --> 00:13:30,000 et ceci est un acronyme qui décrit ridicule une très bonne idée, 236 00:13:30,000 --> 00:13:34,000 qui est la séparation des différents aspects d'un programme, 237 00:13:34,000 --> 00:13:39,000 spécifiquement en gardant séparée de la logique ou de la logique métier d'un site web 238 00:13:39,000 --> 00:13:42,000 de sorte que tout ce qui implique des choses comme 239 00:13:42,000 --> 00:13:45,000 appel de fonctions et d'interrogation des bases de données et autres 240 00:13:45,000 --> 00:13:48,000 se passe pas chez votre code HTML 241 00:13:48,000 --> 00:13:51,000 mais plutôt dans des fichiers séparés, et en effet, il ya ce fichier une 242 00:13:51,000 --> 00:13:54,000 généralement que vous avez appelé le contrôleur 243 00:13:54,000 --> 00:13:56,000 c'est vraiment le cerveau derrière l'opération, et nous allons voir un exemple 244 00:13:56,000 --> 00:13:58,000 cela dans un instant. 245 00:13:58,000 --> 00:14:01,000 >> Il s'agit d'un modèle qui est le code de programmation 246 00:14:01,000 --> 00:14:05,000 qui fait le parler à vos bases de données, qui parle à Yahoo Finance et autres, 247 00:14:05,000 --> 00:14:08,000 et puis il ya le V dans MVC, les points de vue, 248 00:14:08,000 --> 00:14:11,000 toutes les choses qui se rapporte à l'esthétique, les fichiers qui contiennent le 249 00:14:11,000 --> 00:14:14,000 votre code HTML, CSS et peut-être votre etc. 250 00:14:14,000 --> 00:14:17,000 L'idée ici, comme ce tableau indique, est que le contrôleur 251 00:14:17,000 --> 00:14:21,000 est le fichier, comme nous le verrons bientôt, et comme vous pourrez le voir dans pset notamment 7, 252 00:14:21,000 --> 00:14:24,000 que le monde parle par l'intermédiaire de leur navigateur Web. 253 00:14:24,000 --> 00:14:27,000 C'est le fichier qui reçoit la visite sur l'Internet public, 254 00:14:27,000 --> 00:14:30,000 mais le contrôleur parle potentiellement un modèle, 255 00:14:30,000 --> 00:14:34,000 qui est une ou plusieurs autres fichiers contenant le code lié à des données, 256 00:14:34,000 --> 00:14:37,000 code lié aux bases de données et autres, et puis il parle à 257 00:14:37,000 --> 00:14:40,000 le dispositif de commande une ou plusieurs autres fichiers connues sous le nom de vues, 258 00:14:40,000 --> 00:14:43,000 qui sont l'esthétique d'une page Web, des modèles de toutes sortes, 259 00:14:43,000 --> 00:14:47,000 qui pourrait prendre certaines données en entrée, mais à la fin de la journée 260 00:14:47,000 --> 00:14:50,000 la seule logique à l'intérieur d'une vue doit être le rendu de ces données, 261 00:14:50,000 --> 00:14:53,000 itération sur une boucle et fait cracher une certaine 262 00:14:53,000 --> 00:14:56,000 HTML interprétation de celle-ci ou même quelque chose comme un fichier PDF. 263 00:14:56,000 --> 00:14:59,000 >> Ce qui est bien à propos de MVC est que vous pouvez avoir des opinions différentes 264 00:14:59,000 --> 00:15:02,000 sur la base du type de dispositif, en fonction du type de format de fichier effectivement 265 00:15:02,000 --> 00:15:04,000 voulons montrer à l'utilisateur. 266 00:15:04,000 --> 00:15:10,000 Jetons un coup d'oeil à quelques exemples de plus en plus complexes et bien conçu 267 00:15:10,000 --> 00:15:13,000 en commençant d'abord avec la version 0 ici. 268 00:15:13,000 --> 00:15:16,000 Permettez-moi aller de l'avant et d'ouvrir dans notre annuaire MVC aujourd'hui 269 00:15:16,000 --> 00:15:21,000 un fichier nommé index.php dans le répertoire 0. 270 00:15:21,000 --> 00:15:26,000 Remarquez que c'est un site super simple et très décevante 271 00:15:26,000 --> 00:15:29,000 c'est une sorte de version 0 d'une page d'accueil pour CS50, 272 00:15:29,000 --> 00:15:32,000 et remarquez comment nous avons un lien vers Lectures, nous avons un lien vers Syllabus, 273 00:15:32,000 --> 00:15:35,000 et si je suis le lien vers Lectures préavis que l'URL 274 00:15:35,000 --> 00:15:39,000 là-haut va changer à lectures.php. 275 00:15:39,000 --> 00:15:44,000 Si je puis suivez le lien vers semaine 1 avis indiquant que l'URL change à week1.php. 276 00:15:44,000 --> 00:15:46,000 Il semble y avoir une structure hiérarchique assez simple ici. 277 00:15:46,000 --> 00:15:49,000 >> Jetons un coup d'oeil sous le capot sur la façon dont cela est présenté, 278 00:15:49,000 --> 00:15:53,000 et en effet, si je regarde index.php c'est assez simple. 279 00:15:53,000 --> 00:15:57,000 En fait, même si j'ai appelé ce fichier en PHP il n'y a aucun code de programmation. 280 00:15:57,000 --> 00:16:01,000 Il s'agit d'un commentaire que j'ai écrit en PHP ici juste afin que l'utilisateur ne se retrouve pas le voir. 281 00:16:01,000 --> 00:16:05,000 Bien sûr, comme avant, tout ce qui est entre les balises PHP 282 00:16:05,000 --> 00:16:08,000 est interprété, même si c'est un commentaire, et d'interpréter un commentaire 283 00:16:08,000 --> 00:16:11,000 signifie simplement le jeter à la fin de la journée et pas vraiment 284 00:16:11,000 --> 00:16:15,000 l'envoyer au navigateur, donc tout ici est seulement esthétique. 285 00:16:15,000 --> 00:16:20,000 Si j'ouvre même lectures.php c'est trop juste un fichier codé en dur. 286 00:16:20,000 --> 00:16:23,000 Il arrive à être appelé quelque chose. Php, 287 00:16:23,000 --> 00:16:27,000 mais il est vraiment juste. html, et week1.php, week2.php 288 00:16:27,000 --> 00:16:31,000 sont tout de même balisage, donc il ya un tas de défauts de cette conception. 289 00:16:31,000 --> 00:16:33,000 Premièrement, c'est une énorme quantité de copier / coller. 290 00:16:33,000 --> 00:16:37,000 Même si la seule chose qui change entre ces fichiers est la liste non-ordonnée, 291 00:16:37,000 --> 00:16:41,000 les balises li, j'ai tout de même avoir le type doc, HTML, tête, 292 00:16:41,000 --> 00:16:44,000 titre, le corps fin, gros HTML et plus 293 00:16:44,000 --> 00:16:47,000 dans chaque fichier unique, ce qui signifie que si je veux de restructurer 294 00:16:47,000 --> 00:16:50,000 cette page web ou restylize je dois y aller et de modifier 295 00:16:50,000 --> 00:16:54,000 tous ces fichiers manuellement ou avec un peu massif rechercher et remplacer. 296 00:16:54,000 --> 00:17:01,000 >> Prenons un pas de plus vers une conception plus intelligente, plus penser en version 1 ici 297 00:17:01,000 --> 00:17:04,000 grâce à quoi, par la me lire ce que nous avons inclus de sorte que vous pouvez jouer avec 298 00:17:04,000 --> 00:17:07,000 celles-ci plus tranquille à la maison préavis que nous avons ici 299 00:17:07,000 --> 00:17:10,000 un résumé des fichiers dans la version 1 de ce site, 300 00:17:10,000 --> 00:17:13,000 et il me semble que je l'ai pris sur moi de factoriser 301 00:17:13,000 --> 00:17:17,000 un code commun, header.php et footer.php. 302 00:17:17,000 --> 00:17:20,000 Eh bien, nous allons jeter un coup d'oeil à ce qu'il ya dans le premier d'entre eux. 303 00:17:20,000 --> 00:17:23,000 Header.php semble familier, 304 00:17:23,000 --> 00:17:26,000 mais remarquez où ça me coupe la parole? 305 00:17:26,000 --> 00:17:30,000 Juste après la ligne 19, de sorte que c'est tout ce qui était commun 306 00:17:30,000 --> 00:17:33,000 de l'index.php fichiers, lectures.php, 307 00:17:33,000 --> 00:17:36,000 semaine1 et week2.php de l'exemple précédent. 308 00:17:36,000 --> 00:17:40,000 Ce que j'ai fait était exemplaire et tout coupe qui était commun à tous ces fichiers, 309 00:17:40,000 --> 00:17:44,000 le mettre dans un fichier d'en-tête distincte, et de même dans footer.php 310 00:17:44,000 --> 00:17:48,000 ai-je appliquer le même principe par lequel les seules lignes intéressantes 311 00:17:48,000 --> 00:17:52,000 dans footer.php sont ces deux, le corps étroit et HTML proche. 312 00:17:52,000 --> 00:17:55,000 >> Mais ce que cela signifie, c'est que maintenant dans la nouvelle version 313 00:17:55,000 --> 00:17:59,000 de l'avis index.php comment beaucoup plus simple qu'il peut obtenir. 314 00:17:59,000 --> 00:18:02,000 Certes, un peu plus cryptique regarder, un peu moins intuitif 315 00:18:02,000 --> 00:18:06,000 à suivre de haut en bas, mais mon Dieu, tout cela redondance est désormais révolue. 316 00:18:06,000 --> 00:18:10,000 Nous avons besoin de l'aide d'une fonction PHP littéralement appelé nécessiter jusqu'à haut, 317 00:18:10,000 --> 00:18:15,000 qui n'est pas sans rappeler, rappeler, de C # include du mécanisme. 318 00:18:15,000 --> 00:18:17,000 Nous avons besoin de header.php au sommet. 319 00:18:17,000 --> 00:18:20,000 Nous avons besoin de footer.php à la base, et la seule chose qui est différente 320 00:18:20,000 --> 00:18:25,000 ou de particulier dans ce dossier est le contenu qui est censé être unique à elle. 321 00:18:25,000 --> 00:18:29,000 Si je puis aller dans, disons, lectures.php, le même principe s'applique. 322 00:18:29,000 --> 00:18:32,000 Encore une fois, quelques commentaires là-haut, mais j'ai besoin d'en-tête, pied de page requièrent, 323 00:18:32,000 --> 00:18:35,000 et entre les deux, c'est uniquement le contenu qui a réellement changé. 324 00:18:35,000 --> 00:18:38,000 Et si nous avons regardé dans la semaine 1 et semaine 2 nous verrions 325 00:18:38,000 --> 00:18:42,000 que le même principe a été appliqué là-bas. 326 00:18:42,000 --> 00:18:44,000 Eh bien, nous ne sommes pas tout à fait terminé là. 327 00:18:44,000 --> 00:18:48,000 >> Jetons un coup d'oeil à la version 2, qui a une structure similaire, 328 00:18:48,000 --> 00:18:50,000 mais remarquez maintenant, j'ai introduit quelque chose d'autre. 329 00:18:50,000 --> 00:18:53,000 Dans la ligne 10, j'ai introduit helpers.php, 330 00:18:53,000 --> 00:18:55,000 qui contient apparemment des fonctions auxiliaires. 331 00:18:55,000 --> 00:18:58,000 Une fonction d'aide est généralement une fonction relativement courte 332 00:18:58,000 --> 00:19:01,000 que vous écrivez pour vous aider dans divers endroits, 333 00:19:01,000 --> 00:19:04,000 et nous allons voir ce qu'il ya dedans des helpers.php. 334 00:19:04,000 --> 00:19:07,000 Dans ce cas, on dirait qu'il a 2 fonctions. 335 00:19:07,000 --> 00:19:10,000 Rappel de l'autre jour avec notre exemple cube 336 00:19:10,000 --> 00:19:13,000 vous pouvez définir vos propres fonctions en PHP, et ce que j'ai fait aujourd'hui, c'est que je n'ai 337 00:19:13,000 --> 00:19:17,000 fonctions définies appelées rendre pied de page et en-tête rendre, 338 00:19:17,000 --> 00:19:21,000 dont le premier a un paramètre appelé données, 339 00:19:21,000 --> 00:19:25,000 dont la valeur par défaut est un tableau vide, comme l'a suggéré il ya, 340 00:19:25,000 --> 00:19:29,000 et nous pouvons écrire ce encore plus succincte dans la dernière version de PHP 341 00:19:29,000 --> 00:19:32,000 en disant ouverte crochet, crochet fermé. 342 00:19:32,000 --> 00:19:35,000 Cela signifie un tableau vide de taille 0, mais néanmoins un tableau. 343 00:19:35,000 --> 00:19:38,000 >> Cette fonction extrait est un peu spéciale en ce 344 00:19:38,000 --> 00:19:41,000 ce qu'il fait est qu'il prend comme argument un tableau associatif 345 00:19:41,000 --> 00:19:45,000 qui a 0 ou plusieurs paires clé-valeur, et si vous avez une clé de foo 346 00:19:45,000 --> 00:19:48,000 et une valeur de la fonction de la barre d'extrait 347 00:19:48,000 --> 00:19:51,000 crée une situation qui maintenant, comme la ligne 11, 348 00:19:51,000 --> 00:19:57,000 vous avez une variable locale appelée $ foo dont la valeur est bar. 349 00:19:57,000 --> 00:19:59,000 Et si vous aviez plus de clés et de valeurs dans le tableau de données, 350 00:19:59,000 --> 00:20:03,000 même auraient-ils être extraits dans la portée locale 351 00:20:03,000 --> 00:20:06,000 espace de nom ou de telle sorte que footer.php et 352 00:20:06,000 --> 00:20:09,000 la même idée ici-bas afin que header.php 353 00:20:09,000 --> 00:20:12,000 avoir accès à ces variables. 354 00:20:12,000 --> 00:20:15,000 En fait, permettez-moi d'ouvrir à nouveau header.php 355 00:20:15,000 --> 00:20:18,000 et attirer l'attention maintenant à quoi il ressemble dans cette version. 356 00:20:18,000 --> 00:20:22,000 >> Plutôt que de coder en dur CS50 que le titre de chaque page 357 00:20:22,000 --> 00:20:24,000 constater le dynamisme qui est possible aujourd'hui. 358 00:20:24,000 --> 00:20:29,000 À la ligne 5 Je suis l'écho d'une variable title, 359 00:20:29,000 --> 00:20:34,000 mais d'abord je suis de passage cette variable titre à une fonction appelée htmlspecialchars. 360 00:20:34,000 --> 00:20:38,000 Un nom stupide pour une fonction, tant qu'il est, mais il fait vraiment ce qu'il dit. 361 00:20:38,000 --> 00:20:41,000 Il veille à ce que tous les caractères spéciaux 362 00:20:41,000 --> 00:20:46,000 dans la chaîne qui a été adoptée en HTML d'échappement sont bien. 363 00:20:46,000 --> 00:20:49,000 C'est en fait un moyen d'éviter ce qu'on appelle un cross site scripting attaque 364 00:20:49,000 --> 00:20:52,000 par lequel quelqu'un peut malveillante ou accidentelle 365 00:20:52,000 --> 00:20:55,000 injecter leur propre code HTML dans votre site web 366 00:20:55,000 --> 00:20:59,000 en collant dans une certaine forme, par exemple, 367 00:20:59,000 --> 00:21:02,000 quelque chose que vous n'avez pas été assez attendent, notamment le code JavaScript, 368 00:21:02,000 --> 00:21:05,000 comme nous allons parler dans une semaine ou deux de temps. 369 00:21:05,000 --> 00:21:08,000 >> Cette header.php maintenant, c'est une vue 370 00:21:08,000 --> 00:21:12,000 dans le sens où il permet de visualiser le contenu du esthétiquement un ensemble de données. 371 00:21:12,000 --> 00:21:14,000 Mais plus spécifiquement, il s'agit d'un modèle. 372 00:21:14,000 --> 00:21:19,000 C'est en quelque sorte un plan maintenant de ce que nous voulons l'en-tête de chaque page pour ressembler, 373 00:21:19,000 --> 00:21:23,000 mais il ya un certain dynamisme dans ce que nous voulons que le titre soit inséré dynamiquement 374 00:21:23,000 --> 00:21:26,000 sur la base de la variable titre 375 00:21:26,000 --> 00:21:30,000 qui a été extrait lorsque nous avons appelé, encore une fois, 376 00:21:30,000 --> 00:21:33,000 la fonction de rendu d'en-tête. 377 00:21:33,000 --> 00:21:36,000 Maintenant, si on regarde de bas de page de rendu, il ya en fait pas très utile de ce droit maintenant 378 00:21:36,000 --> 00:21:40,000 parce que dans footer.php il n'y a pas de dynamisme que ce soit. 379 00:21:40,000 --> 00:21:43,000 Il pourrait y avoir, mais pour le moment c'est une liste codée en dur de 2 balises, 380 00:21:43,000 --> 00:21:46,000 mais l'idée est de même, de sorte que suggère en fait pourquoi 381 00:21:46,000 --> 00:21:49,000 avons-nous perdre du temps avec un en-tête de rendu et d'une fonction de conversion de bas de page? 382 00:21:49,000 --> 00:21:52,000 Laissez-moi aller à la place maintenant dans la version 3, 383 00:21:52,000 --> 00:21:56,000 et dans la version 3 dans les assistances, j'ai décidé de le simplifier encore plus. 384 00:21:56,000 --> 00:21:58,000 >> Laissez-moi avoir une fonction de rendu. 385 00:21:58,000 --> 00:22:02,000 Permettez-moi de faire prendre un autre argument, cette fois appelée modèle, 386 00:22:02,000 --> 00:22:05,000 qui est destiné à être le nom d'un modèle, 387 00:22:05,000 --> 00:22:11,000 et puis je vais concaténer orgueil. php à la valeur de cette variable, 388 00:22:11,000 --> 00:22:17,000 et puis si elle existe, foo.php bar.php ou header.php et footer.php, 389 00:22:17,000 --> 00:22:20,000 alors je vais aller de l'avant et d'extraire les données variables 390 00:22:20,000 --> 00:22:23,000 puis exiger cette voie. 391 00:22:23,000 --> 00:22:29,000 En d'autres termes, à utiliser maintenant, si j'ouvre index.php 392 00:22:29,000 --> 00:22:32,000 remarquerez que je n'appelle pas d'en-tête rendu plus. 393 00:22:32,000 --> 00:22:36,000 Je viens d'appeler rendre, mais je passe à une valeur cité d'en-tête 394 00:22:36,000 --> 00:22:39,000 de préciser quel modèle je veux vraiment à charger. 395 00:22:39,000 --> 00:22:41,000 >> Puis ici remarquer ce que je fais. 396 00:22:41,000 --> 00:22:44,000 Je suis de passage en dynamique une clé de titre, 397 00:22:44,000 --> 00:22:47,000 une valeur de CS50, et cela aussi, comme nous l'avons vu précédemment, 398 00:22:47,000 --> 00:22:51,000 pourrait être plus succincte dans la dernière version de PHP 399 00:22:51,000 --> 00:22:54,000 où je peux remplacer la fonction de tableau avec des crochets, 400 00:22:54,000 --> 00:22:57,000 que je propose est encore plus lisible et certainement 401 00:22:57,000 --> 00:22:59,000 un peu plus facile à taper. 402 00:22:59,000 --> 00:23:02,000 Et bien sûr, avec l'appel de rendu bas de page vers le bas, 403 00:23:02,000 --> 00:23:05,000 nous ne vous embêtez pas passer dans un second argument du tout, pas de tableau associatif, 404 00:23:05,000 --> 00:23:07,000 parce qu'il n'y a rien à l'intérieur de cette dynamique de bas de page. 405 00:23:07,000 --> 00:23:10,000 C'est juste quelques balises de fermeture pour le HTML. 406 00:23:10,000 --> 00:23:14,000 Bon, nous prenons des mesures pour donner réellement nettoyer les choses ici, 407 00:23:14,000 --> 00:23:17,000 mais laissez-moi ouvrir 2 exemples finales. 408 00:23:17,000 --> 00:23:21,000 Celui-ci, numéro 4, vous remarquerez que j'ai pris la décision consciente maintenant 409 00:23:21,000 --> 00:23:26,000 à améliorer l'exemple précédent en utilisant une hiérarchie enfin à mes fichiers. 410 00:23:26,000 --> 00:23:29,000 >> Notez que dans ce résumé, en ce qui me lisez, j'ai introduit 411 00:23:29,000 --> 00:23:32,000 un répertoire comprend et un répertoire templates 412 00:23:32,000 --> 00:23:35,000 dont le contenu va y avoir des choses que je veux comprendre 413 00:23:35,000 --> 00:23:38,000 et les modèles que je veux rendre, respectivement. 414 00:23:38,000 --> 00:23:42,000 C'est vraiment moi étant anale et essayer de garder les choses en ordre, 415 00:23:42,000 --> 00:23:45,000 conserver les fichiers liés ensemble, mais le résultat final 416 00:23:45,000 --> 00:23:48,000 est que nous avons maintenant une configuration légèrement plus net, mais nous devons nous rappeler maintenant 417 00:23:48,000 --> 00:23:51,000 dans, par exemple, index.php 418 00:23:51,000 --> 00:23:55,000 lorsque nous avons besoin du fichier helpers.php 419 00:23:55,000 --> 00:24:01,000 nous devons maintenant besoin via includes / helpers.php 420 00:24:01,000 --> 00:24:06,000 plutôt que de simplement dire helpers.php parce que maintenant il est en fait dans un sous-répertoire. 421 00:24:06,000 --> 00:24:09,000 Maintenant, en passant, que vous verrez dans ces exemples et quelques autres 422 00:24:09,000 --> 00:24:11,000 des fonctions telles que l'exigent, requièrent une fois. 423 00:24:11,000 --> 00:24:15,000 Il s'agit en fait d'une fonction lui-même appelé comprendre, et ils ont tous un comportement légèrement différent. 424 00:24:15,000 --> 00:24:18,000 Ici, je dis une fois besoin de faire super clair que je ne veux que ceux 425 00:24:18,000 --> 00:24:20,000 aides inclus dans mon projet une fois. 426 00:24:20,000 --> 00:24:24,000 Mais si je fais attention et si je suis en train de réfléchir à ma logique proprement 427 00:24:24,000 --> 00:24:27,000 il suffira de dire trop juste besoin là-haut 428 00:24:27,000 --> 00:24:31,000 tant que je n'ai moi-même pas accidentellement besoin de ce même fichier ailleurs. 429 00:24:31,000 --> 00:24:34,000 En fait, c'est une manière un peu plus efficace de faire les choses, puis en utilisant 430 00:24:34,000 --> 00:24:38,000 requièrent une fois, donc je vais la réduire à un peu besoin. 431 00:24:38,000 --> 00:24:40,000 >> Prenons un peu plus loin. 432 00:24:40,000 --> 00:24:46,000 Ce dernier exemple présent, la version 5, a une hiérarchie de dossiers encore plus propre. 433 00:24:46,000 --> 00:24:50,000 Remarquez ce que j'ai fait ici par la me lire dans cette version finale 434 00:24:50,000 --> 00:24:54,000 est maintenant j'ai mon répertoire HTML, que j'ai eu tout ce temps, 435 00:24:54,000 --> 00:24:58,000 mais à l'intérieur d'il ya maintenant seulement index.php, lectures.php, 436 00:24:58,000 --> 00:25:01,000 week1.php et week2.php. 437 00:25:01,000 --> 00:25:05,000 Le répertoire comprend vit désormais aux côtés du répertoire HTML, 438 00:25:05,000 --> 00:25:08,000 donc au même niveau en tant que frères et sœurs, pour ainsi dire. 439 00:25:08,000 --> 00:25:10,000 Il en va du dossier Modèles. 440 00:25:10,000 --> 00:25:14,000 Les plats à emporter clé ici est que j'ai présenté la structure un peu plus, 441 00:25:14,000 --> 00:25:17,000 mais la principale caractéristique est désormais que seuls les fichiers 442 00:25:17,000 --> 00:25:21,000 qui ont besoin d'être accessible sur le Web, publiquement adressables 443 00:25:21,000 --> 00:25:25,000 par une URL sur l'Internet public sont dans mon répertoire HTML. 444 00:25:25,000 --> 00:25:28,000 >> Fichiers Pendant ce temps, d'autres, helpers.php, footer.php, 445 00:25:28,000 --> 00:25:32,000 header.php, qui sont sans doute peut-être plus sensible, 446 00:25:32,000 --> 00:25:35,000 peut-être des aides a effectivement quelques noms d'utilisateur et mots de passe ou quelque intellectuelle 447 00:25:35,000 --> 00:25:39,000 propriété de la mienne, je fonctionne vraiment pas envie de voir le monde, même si accidentellement. 448 00:25:39,000 --> 00:25:45,000 C'est une bonne habitude à garder hors du répertoire public HTML 449 00:25:45,000 --> 00:25:48,000 tous les fichiers qui ne sont pas eux-mêmes doivent être publiques. 450 00:25:48,000 --> 00:25:51,000 Tout ce que vous avez à faire dans ce cas quand on regarde, par exemple, 451 00:25:51,000 --> 00:25:55,000 fichier index.php dans le répertoire HTML, 452 00:25:55,000 --> 00:25:58,000 remarquerez que nous suffit d'être un peu plus prudent en exigeant 453 00:25:58,000 --> 00:26:00,000 ou exiger une fois ce fichier. 454 00:26:00,000 --> 00:26:03,000 Je dois d'abord faire .. pour aller vers le répertoire parent, 455 00:26:03,000 --> 00:26:06,000 alors ne / includes / helpers.php 456 00:26:06,000 --> 00:26:12,000 de se replonger dans pour obtenir le fichier dont je me soucie. 457 00:26:12,000 --> 00:26:16,000 >> Toutes les questions, puis sur MVC 458 00:26:16,000 --> 00:26:20,000 ou cette incarnation relativement simple de celle-ci? 459 00:26:20,000 --> 00:26:23,000 Et permettez-moi de préciser que nous nous sommes concentrés un peu sur le 460 00:26:23,000 --> 00:26:27,000 V ici, la vue et l'affacturage hors de ces modèles. 461 00:26:27,000 --> 00:26:30,000 Nous n'avons pas vraiment distingué M de C pour l'instant. 462 00:26:30,000 --> 00:26:33,000 En fait, il n'ya vraiment pas de M ici, et même notre C, 463 00:26:33,000 --> 00:26:36,000 contrôleur, ne fait pas vraiment tant que ça, mais vous aurez beaucoup plus 464 00:26:36,000 --> 00:26:39,000 connaître à la fois de ces 2 lettres de MVC, 465 00:26:39,000 --> 00:26:43,000 ou plutôt, vous aurez beaucoup plus familier avec le C 466 00:26:43,000 --> 00:26:49,000 dans MVC pour 7 problème posé, il n'y a donc plus de cela à l'horizon. 467 00:26:49,000 --> 00:26:51,000 Des questions? 468 00:26:51,000 --> 00:26:53,000 Il s'agit en fait n'y a personne ici. 469 00:26:53,000 --> 00:26:57,000 >> Ok, nous allons maintenant passer à la deuxième et dernière question pour aujourd'hui. 470 00:26:57,000 --> 00:27:00,000 C'est l'introduction d'une base de données. 471 00:27:00,000 --> 00:27:03,000 Jusqu'à ce point, nous avons eu quelques moyens de stockage de données. 472 00:27:03,000 --> 00:27:05,000 Nous avons utilisé des variables. 473 00:27:05,000 --> 00:27:08,000 Retour dans notre fichier C, I / O discussions que nous avons commencé à utiliser des fichiers texte 474 00:27:08,000 --> 00:27:11,000 et l'utilisation de fichiers comme fprintf, puis nous avons même commencé 475 00:27:11,000 --> 00:27:14,000 parle CSV dépose un peu, valeurs séparées par des virgules, 476 00:27:14,000 --> 00:27:17,000 de sorte que tous ces nous a permis d'avoir des données stockées 477 00:27:17,000 --> 00:27:19,000 soit non persistante ou persistante. 478 00:27:19,000 --> 00:27:23,000 Mais même CSV ne sont pas vraiment propice à la recherche 479 00:27:23,000 --> 00:27:25,000 et l'insertion et la suppression. 480 00:27:25,000 --> 00:27:28,000 C'est vraiment juste un fichier texte stupide séparés par des virgules 481 00:27:28,000 --> 00:27:30,000 rangée par rangée par rangée par rangée, donc si vous voulez 482 00:27:30,000 --> 00:27:32,000 rechercher ce fichier le mieux que vous pouvez faire, c'est vraiment la recherche linéaire. 483 00:27:32,000 --> 00:27:34,000 Vous devez commencer par le haut du fichier, lire le tout dans, 484 00:27:34,000 --> 00:27:36,000 et de chercher une valeur d'intérêt. 485 00:27:36,000 --> 00:27:39,000 Si vous voulez y insérer que vous devez faire la même chose, 486 00:27:39,000 --> 00:27:41,000 itérer sur elle et l'insertion dans un endroit particulier, 487 00:27:41,000 --> 00:27:45,000 et en fait, vous avez à faire toute la logique de la recherche vous-même. 488 00:27:45,000 --> 00:27:49,000 >> Vous ne pouvez pas intelligent modèle correspondant sur un fichier CSV à moins que vous écrivez vous-même le code. 489 00:27:49,000 --> 00:27:51,000 Vous ne pouvez pas faire de filtration d'un fichier CSV 490 00:27:51,000 --> 00:27:53,000 à moins que vous écrivez vous-même le code. 491 00:27:53,000 --> 00:27:56,000 Ce ne serait pas bien si quelqu'un d'autre a mis tout de l'effort 492 00:27:56,000 --> 00:27:59,000 de faire réellement la recherche facile et une insertion facile 493 00:27:59,000 --> 00:28:01,000 et la suppression et mise à jour et ainsi de suite? 494 00:28:01,000 --> 00:28:04,000 C'est exactement ce qu'est une base de données est. 495 00:28:04,000 --> 00:28:07,000 SQL, langage structuré de requêtes, est encore une autre langue 496 00:28:07,000 --> 00:28:10,000 que nous vous présentons aujourd'hui, mais c'est trop assez accessible, 497 00:28:10,000 --> 00:28:13,000 et ce que nous allons vraiment faire est de simplement arracher de lui quelques-uns des plus saillant 498 00:28:13,000 --> 00:28:16,000 Caractéristiques de sorte que pour pset 7, et si vous faites quelque chose basé web, 499 00:28:16,000 --> 00:28:19,000 votre projet final, vous avez la possibilité de vous exprimer 500 00:28:19,000 --> 00:28:22,000 en termes de requêtes de données. 501 00:28:22,000 --> 00:28:25,000 Vous avez la possibilité de stocker un peu ou beaucoup de données 502 00:28:25,000 --> 00:28:28,000 d'une manière beaucoup plus structurée qui sera à la fin de la journée 503 00:28:28,000 --> 00:28:32,000 vous rendre la vie plus facile, car avec SQL, vous pouvez vous exprimer 504 00:28:32,000 --> 00:28:35,000 beaucoup plus de précision, beaucoup plus méthodiquement afin d' 505 00:28:35,000 --> 00:28:40,000 récupérer un sous-ensemble de données à partir d'un corpus de données plus large. 506 00:28:40,000 --> 00:28:45,000 >> Vous pouvez penser à une base de données, dans ce cas, une base de données SQL, vraiment comme Excel 507 00:28:45,000 --> 00:28:48,000 ou Numbers où il est une feuille de calcul, 508 00:28:48,000 --> 00:28:50,000 ou peut-être plusieurs feuilles de calcul, un tableur et, bien sûr, 509 00:28:50,000 --> 00:28:53,000 présente des rangées et des colonnes, et c'est parce que 510 00:28:53,000 --> 00:28:56,000 Bases de données SQL sont relationnelles, relationnelles dans le sens 511 00:28:56,000 --> 00:28:59,000 qu'ils stockent les données en fonction de ces tableaux, 512 00:28:59,000 --> 00:29:01,000 des lignes et des colonnes. 513 00:29:01,000 --> 00:29:03,000 Ils sont plus performant que quelque chose comme une feuille de calcul, 514 00:29:03,000 --> 00:29:05,000 et une feuille de calcul est destiné à être utilisé par un être humain. 515 00:29:05,000 --> 00:29:08,000 Une base de données est destiné à être utilisé par un programmeur 516 00:29:08,000 --> 00:29:12,000 contre l'écriture de code, donc l'incarnation d'une base de données 517 00:29:12,000 --> 00:29:14,000 va être soit en ligne de commande. 518 00:29:14,000 --> 00:29:18,000 >> Une des bases de données relationnelles les plus populaires là-bas est, encore une fois, MySQL, 519 00:29:18,000 --> 00:29:22,000 qui est merveilleusement libre, performant très élevés, et c'est ce que 520 00:29:22,000 --> 00:29:24,000 Facebook utilisé très tôt et dans une certaine mesure encore aujourd'hui 521 00:29:24,000 --> 00:29:27,000 pour stocker un grand nombre de ses données, et nous le verrons dans un instant 522 00:29:27,000 --> 00:29:30,000 que l'utilisation des commandes relativement simples 523 00:29:30,000 --> 00:29:33,000 nous pouvons sélectionner des données, les données d'insertion, de mise à jour des données, 524 00:29:33,000 --> 00:29:37,000 supprimer les données et autres, mais heureusement, il ya plus d'une interface conviviale 525 00:29:37,000 --> 00:29:39,000 que juste en tapant à l'invite noir et blanc ici. 526 00:29:39,000 --> 00:29:43,000 Nous allons utiliser pour pset 7 et au-delà d'un outil gratuit appelé phpMyAdmin. 527 00:29:43,000 --> 00:29:45,000 Le nom est une coïncidence. 528 00:29:45,000 --> 00:29:47,000 L'outil qui arrive à être mis en œuvre en PHP, 529 00:29:47,000 --> 00:29:49,000 mais c'est fondamentalement hors de propos. 530 00:29:49,000 --> 00:29:53,000 Ce qui est utile à propos de phpMyAdmin, c'est qu'il est un utilitaire basé sur le Web. 531 00:29:53,000 --> 00:29:55,000 Nous l'avons pré-installée dans l'appareil pour vous, 532 00:29:55,000 --> 00:29:58,000 et avec lui, vous pouvez créer des tables dans une base de données, 533 00:29:58,000 --> 00:30:01,000 vous pouvez insérer des données, supprimer des données, et généralement voir 534 00:30:01,000 --> 00:30:04,000 vos données dans un assez convivial environnement. 535 00:30:04,000 --> 00:30:07,000 Vos utilisateurs ne vont pas utiliser phpMyAdmin. 536 00:30:07,000 --> 00:30:09,000 >> C'est vraiment juste un outil administratif ou développeur 537 00:30:09,000 --> 00:30:12,000 qui à voir et à fouiller vos données et comprendre comment le structurer, 538 00:30:12,000 --> 00:30:15,000 un peu comme vous vous pouvez utiliser Excel ou Numbers, 539 00:30:15,000 --> 00:30:19,000 mais ça va être un excellent moyen de visualiser ce qui se passe sous le capot 540 00:30:19,000 --> 00:30:22,000 afin que vous puissiez vous concentrer sur la résolution de problème intéressant et pas tellement 541 00:30:22,000 --> 00:30:25,000 sur les commandes ésotériques. 542 00:30:25,000 --> 00:30:28,000 Jetons un coup d'oeil à un exemple de données qui peuvent être stockées tabularly 543 00:30:28,000 --> 00:30:30,000 dans une base de données relationnelle. 544 00:30:30,000 --> 00:30:32,000 Voici un exemple. 545 00:30:32,000 --> 00:30:35,000 Maintenant, malheureusement, phpMyAdmin a commis une erreur sur le côté de façon jeter trop de mots 546 00:30:35,000 --> 00:30:38,000 et des graphiques à vous, mais si vous parfaire dans tout le 547 00:30:38,000 --> 00:30:42,000 Colonne ID, la colonne de nom d'utilisateur, et la colonne de hachage, 548 00:30:42,000 --> 00:30:45,000 c'est effectivement une feuille de calcul, mais il arrive à être un extrait 549 00:30:45,000 --> 00:30:49,000 d'une table à l'intérieur de l'appareil 550 00:30:49,000 --> 00:30:53,000 à l'aide d'un fichier que nous vous fournir en 7 set problème. 551 00:30:53,000 --> 00:30:57,000 >> En particulier, nous vous donnons un fichier qui représente 552 00:30:57,000 --> 00:31:01,000 d'un utilisateur table, donc une feuille de calcul contenant les utilisateurs avec 3 colonnes, 553 00:31:01,000 --> 00:31:05,000 dont l'un est un identifiant unique à partir de 1 et est incrémenté par la suite. 554 00:31:05,000 --> 00:31:08,000 La deuxième colonne est un nom d'utilisateur, et ceux d'entre vous qui ont fait Hacker, 555 00:31:08,000 --> 00:31:12,000 l'édition Hacker pour pset 2, peut reconnaître certains de ces noms d'utilisateurs au moins. 556 00:31:12,000 --> 00:31:16,000 Sur le côté droit sont des mots de passe, mais ils ne sont pas les mots de passe littérales. 557 00:31:16,000 --> 00:31:19,000 Ils sont hachages de celle-ci, il s'avère 558 00:31:19,000 --> 00:31:22,000 que le stockage de mots de passe dans une base de données est une très mauvaise idée. 559 00:31:22,000 --> 00:31:25,000 Vous avez tous probablement lu à un moment donné de certains site web 560 00:31:25,000 --> 00:31:28,000 base de données ou une entreprise d'être compromise, et il vous faudra alors 561 00:31:28,000 --> 00:31:31,000 changer votre mot de passe, vous devez obtenir des remboursements sur les choses 562 00:31:31,000 --> 00:31:34,000 parce que certains mauvais gars fait irruption dans votre compte en conséquence. 563 00:31:34,000 --> 00:31:38,000 >> Stocker les mots de passe en texte clair, non crypté dans une base de données 564 00:31:38,000 --> 00:31:41,000 est tout à fait stupide, et pourtant c'est très amusant 565 00:31:41,000 --> 00:31:44,000 puis de lire à propos de certaines entreprises très connues 566 00:31:44,000 --> 00:31:47,000 parfois dans la presse dont les bases de données sont compromises, 567 00:31:47,000 --> 00:31:50,000 et cette partie n'est pas drôle, mais le fait que les bases de données contiennent clair 568 00:31:50,000 --> 00:31:53,000 mots de passe est ridicule parce que littéralement avec une ligne de code 569 00:31:53,000 --> 00:31:57,000 vous pouvez protéger contre cette menace particulière, et c'est ce que nous avons fait ici. 570 00:31:57,000 --> 00:32:00,000 Même pour notre petite faux CS50 Version finances 571 00:32:00,000 --> 00:32:03,000 nous sommes le cryptage des mots de passe pour faire bonne mesure, et le fait que 572 00:32:03,000 --> 00:32:07,000 tous ces mots de passe commencer par $ 1 $ n'est qu'une convention. 573 00:32:07,000 --> 00:32:10,000 Cela signifie simplement qu'ils sont cryptées ou vraiment haché, 574 00:32:10,000 --> 00:32:13,000 qui est comme une fonction de cryptage à sens unique 575 00:32:13,000 --> 00:32:17,000 laquelle vous ne pouvez pas inverser ses effets avec quelque chose appelé MD5. 576 00:32:17,000 --> 00:32:21,000 >> Le fait que 50 est après cela signifie que la valeur de salage 577 00:32:21,000 --> 00:32:24,000 de 50 a été utilisé pour hacher tous ces mots de passe, sauf un. 578 00:32:24,000 --> 00:32:27,000 Mine, bien sûr, comme vous pouvez le constater, HA, 579 00:32:27,000 --> 00:32:30,000 a l'aide d'un sel différent, donc ceux d'entre vous qui se sont un peu croche-pied 580 00:32:30,000 --> 00:32:33,000 peut-être dans Hacker 2, qui aurait pu être le résultat de notre avoir utilisé 581 00:32:33,000 --> 00:32:36,000 un hachage différent des autres parce que mon mot de passe est en fait le même 582 00:32:36,000 --> 00:32:38,000 comme un autre utilisateur là-haut. 583 00:32:38,000 --> 00:32:41,000 En fait, si vous avez attendu toutes ces semaines pour savoir 584 00:32:41,000 --> 00:32:44,000 ce que ces mots de passe sont ici ont été les mots de passe qui vous ont été contestées 585 00:32:44,000 --> 00:32:48,000 à sévir dans l'édition du 2 Hacker problème posé, si pas trop difficile. 586 00:32:48,000 --> 00:32:50,000 En fait, malan était le même que jharvard, 587 00:32:50,000 --> 00:32:54,000 mais si nous revenons ils avaient l'air différent. 588 00:32:54,000 --> 00:32:58,000 >> Concentrez-vous sur jharvard de pourpre parce qu'ils ont été salées différemment. 589 00:32:58,000 --> 00:33:01,000 L'algorithme a été perturbé de façon que la 590 00:33:01,000 --> 00:33:05,000 valeur de hachage, la valeur chiffrée est un peu différent 591 00:33:05,000 --> 00:33:08,000 parce que les entrées étaient un peu différent, mais le mot de passe sous le capot 592 00:33:08,000 --> 00:33:10,000 était toujours en fin de compte cramoisi. 593 00:33:10,000 --> 00:33:12,000 Maintenant, qui se soucie de cela? 594 00:33:12,000 --> 00:33:15,000 Eh bien, nous mettons à votre disposition des exemples d'utilisateurs, les noms d'utilisateurs échantillons 595 00:33:15,000 --> 00:33:18,000 et les hachages de leurs mots de passe afin que vous avez réellement une certaine 596 00:33:18,000 --> 00:33:23,000 clients pour CS50 Finances quand vous obtenez d'abord sur le sol avec votre code. 597 00:33:23,000 --> 00:33:27,000 Vous aurez à mettre en œuvre plus de tables à l'intérieur de MySQL, à l'intérieur de la base de données. 598 00:33:27,000 --> 00:33:30,000 Vous aurez à créer plus de tableur, de manière efficace, mais nous avons décidé de vous donner celui-ci 599 00:33:30,000 --> 00:33:33,000 pour vous aider à démarrer, et vous verrez que la spécification du jeu de problème 600 00:33:33,000 --> 00:33:37,000 vous guide à travers le processus d'importation de cette table 601 00:33:37,000 --> 00:33:39,000 et aussi expliquer ce que quelques-unes des caractéristiques, 602 00:33:39,000 --> 00:33:41,000 et vous verrez aussi que nous vous fournissons le code 603 00:33:41,000 --> 00:33:44,000 à traiter le hachage ou le cryptage de ces mots de passe, 604 00:33:44,000 --> 00:33:49,000 vous n'avez donc pas besoin de trop se soucier de ce que MD5 ou analogue est en fait tout à propos. 605 00:33:49,000 --> 00:33:53,000 >> Donc, SQL, langage structuré de requêtes. 606 00:33:53,000 --> 00:33:56,000 C'est, tout simplement, la langue que nous sommes sur le point de commencer à utiliser dans pset 7 607 00:33:56,000 --> 00:34:01,000 et peut-être au-delà de demander des données à partir de certaines bases de données. 608 00:34:01,000 --> 00:34:06,000 Les données sont, encore une fois, stockés tabularly dans ces tables relationnelles, des colonnes et des lignes, 609 00:34:06,000 --> 00:34:09,000 mais en utilisant une syntaxe relativement simple comme supprimer, 610 00:34:09,000 --> 00:34:12,000 insérer, mettre à jour et sélectionnez pouvons-nous faire exactement cela. 611 00:34:12,000 --> 00:34:15,000 Nous pouvons supprimer de la base de données, insérer, 612 00:34:15,000 --> 00:34:19,000 jour des données, ainsi que certains, qui, extraient des données de la base de données. 613 00:34:19,000 --> 00:34:21,000 Comment allons-nous faire cela? 614 00:34:21,000 --> 00:34:23,000 Permettez-moi aller de l'avant dans l'appareil. 615 00:34:23,000 --> 00:34:28,000 Permettez-moi de tirer vers le haut http://localhost, 616 00:34:28,000 --> 00:34:30,000 qui, là encore, est l'appareil local lui-même. 617 00:34:30,000 --> 00:34:32,000 C'est son surnom par défaut. 618 00:34:32,000 --> 00:34:35,000 Et laissez-moi aller / phpmyadmin. 619 00:34:35,000 --> 00:34:39,000 Cela arrive à être une URL spéciale que l'appareil est préconfiguré pour comprendre 620 00:34:39,000 --> 00:34:42,000 qui invite m'a tout de suite un nom d'utilisateur et mot de passe. 621 00:34:42,000 --> 00:34:46,000 >> Comme d'habitude, je vais taper jharvard et cramoisi, 622 00:34:46,000 --> 00:34:48,000 mais se rendre compte que c'est le compte administrateur sur l'ordinateur. 623 00:34:48,000 --> 00:34:53,000 C'est juste une coïncidence qu'il ya aussi un jharvard enregistré pour CS50 Finances. 624 00:34:53,000 --> 00:34:56,000 Jharvard, pourpre, entrez me donne de l'interface utilisateur que nous avons vu 625 00:34:56,000 --> 00:34:59,000 un aperçu de tout à l'heure, et c'est un peu écrasante au premier abord, 626 00:34:59,000 --> 00:35:02,000 mais rassurez-vous, vous n'allez jamais avoir à cliquer sur la plupart des liens dans cet outil. 627 00:35:02,000 --> 00:35:05,000 Vous vous retrouverez à l'aide d'un petit sous-ensemble qui sont super utiles, 628 00:35:05,000 --> 00:35:08,000 la première de bases de données qui est ici. 629 00:35:08,000 --> 00:35:11,000 Si je monte aux bases de données, vous remarquerez que je suis invité à créer une base de données. 630 00:35:11,000 --> 00:35:14,000 C'est comme la création d'un nouveau fichier Excel, de manière efficace. 631 00:35:14,000 --> 00:35:18,000 Je vais aller de l'avant et d'appeler cette conférence, et je vais tout simplement ignorer le champ là-bas, collation. 632 00:35:18,000 --> 00:35:20,000 Il a à voir avec la représentation des données qui y figurent, 633 00:35:20,000 --> 00:35:24,000 et je vais cliquer sur créer, et remarquez maintenant que je laisse aller créer 634 00:35:24,000 --> 00:35:27,000 sur le côté gauche où il est dit pas de bases de données 635 00:35:27,000 --> 00:35:30,000 Je devrais bientôt voir la base de données de conférence. 636 00:35:30,000 --> 00:35:32,000 >> Si je clique maintenant sur le côté gauche, la base de données de conférences, 637 00:35:32,000 --> 00:35:34,000 remarque que mes onglets changent un peu. 638 00:35:34,000 --> 00:35:38,000 J'ai structure, SQL, l'exportation, l'importation et d'autres choses. 639 00:35:38,000 --> 00:35:40,000 La structure est à peu près vide. 640 00:35:40,000 --> 00:35:43,000 Pas de tables dans la base de données, comme il est dit ici, 641 00:35:43,000 --> 00:35:47,000 nous allons donc créer une table, et nous allons aller de l'avant et créer une table 642 00:35:47,000 --> 00:35:53,000 comme les étudiants, et le nombre de colonnes voulons-nous? 643 00:35:53,000 --> 00:35:55,000 Dossier Gardons cette simple, et soit pour chaque élève 644 00:35:55,000 --> 00:35:58,000 un numéro d'identification, un nom et une adresse e-mail. 645 00:35:58,000 --> 00:36:02,000 >> Nous allons garder les choses simples comme ça, donc 3 colonnes, allez. 646 00:36:02,000 --> 00:36:05,000 Le formulaire que vous voyez ici est un peu désordonné et écrasante, 647 00:36:05,000 --> 00:36:08,000 mais il suffit de passer par là, rangée par rangée, donc très rapidement, nous allons donner 648 00:36:08,000 --> 00:36:14,000 la première colonne dans la base de données un ID pour le nom de l'identifiant unique. 649 00:36:14,000 --> 00:36:17,000 Ce sera un entier. Je peux effectivement ignorer longueur et valeurs. 650 00:36:17,000 --> 00:36:21,000 Un int va être 32 bits, peu importe ce que vous tapez là-dedans, nous allons donc laisser le champ vide. 651 00:36:21,000 --> 00:36:24,000 La valeur par défaut, je pourrais le faire nulle, tel que défini. 652 00:36:24,000 --> 00:36:27,000 Je vais laisser cela seul. Ne soyons pas s'inquiéter des valeurs par défaut. 653 00:36:27,000 --> 00:36:29,000 Faisons défiler ici à droite, attributs. 654 00:36:29,000 --> 00:36:31,000 Ce qui est intéressant. 655 00:36:31,000 --> 00:36:33,000 Allons de l'avant et un peu arbitrairement que les ID doit être signé. 656 00:36:33,000 --> 00:36:35,000 Ne perdons pas les nombres négatifs. 657 00:36:35,000 --> 00:36:37,000 >> Allons 0 à 4 milliards, donner ou prendre, 658 00:36:37,000 --> 00:36:40,000 et puis il ne faut pas toucher à aucun de ces champs pour l'instant, là-bas, 659 00:36:40,000 --> 00:36:43,000 mais permettez-moi de taper le nom ici-bas, 660 00:36:43,000 --> 00:36:46,000 et puis l'autre e-mail, de sorte que le hic, c'est courriel 661 00:36:46,000 --> 00:36:50,000 et le nom, évidemment pas des entiers, nous allons donc modifier celles-ci à un autre champ. 662 00:36:50,000 --> 00:36:53,000 Il s'avère varchar, de longueur variable char, 663 00:36:53,000 --> 00:36:56,000 C'est comme une chaîne dans une base de données SQL 664 00:36:56,000 --> 00:36:59,000 mais une longueur variable, et vous avez réellement pour lui dire à l'avance le 665 00:36:59,000 --> 00:37:02,000 longueur maximale de la chaîne, donc je vais un peu arbitrairement 666 00:37:02,000 --> 00:37:05,000 selon le type de convention 255 caractères. 667 00:37:05,000 --> 00:37:08,000 Je ne pouvais tout dire 32. Je pourrais dire 1000. 668 00:37:08,000 --> 00:37:11,000 Vous sorte de nécessité de décider par vous-même en fonction de vos données démographiques ce qui est 669 00:37:11,000 --> 00:37:14,000 le plus long nom de l'élève et aller avec ce numéro ou un peu plus grand, 670 00:37:14,000 --> 00:37:17,000 mais ce qui est bien sur un varchar est ça ne va pas perdre 671 00:37:17,000 --> 00:37:19,000 255 octets sur le nom de chaque élève. 672 00:37:19,000 --> 00:37:23,000 Si c'est DAVID ça ne va pas à utiliser un ensemble de 255 octets, 673 00:37:23,000 --> 00:37:26,000 mais c'est une limite supérieure, donc je vais aller avec 255 seulement par convention, 674 00:37:26,000 --> 00:37:30,000 mais nous pourrions en discuter à une certaine valeur inférieure, et adresse e-mail 675 00:37:30,000 --> 00:37:34,000 que ce soit cohérent 255, mais encore une fois, nous pourrions avoir le même débat. 676 00:37:34,000 --> 00:37:36,000 Mais je vais faire autre chose ici sur le côté droit. 677 00:37:36,000 --> 00:37:40,000 >> Quel est puissant sur une base de données est qu'elle peut faire beaucoup de levage lourd 678 00:37:40,000 --> 00:37:42,000 ou un travail complexe pour vous. 679 00:37:42,000 --> 00:37:46,000 En particulier, je n'aime pas ce que les numéros d'identification de mes élèves sont. 680 00:37:46,000 --> 00:37:49,000 C'est juste censé être un identificateur unique dans une base de données 681 00:37:49,000 --> 00:37:52,000 j'ai donc une représentation succincte 32-bit de cet étudiant 682 00:37:52,000 --> 00:37:55,000 de sorte que je avoir un moyen de les identifier de façon unique 683 00:37:55,000 --> 00:37:58,000 afin qu'il n'y ait deux Davids, par exemple, dans une classe. 684 00:37:58,000 --> 00:38:01,000 En fait, je vais cocher cette case AI, incrémentation automatique, 685 00:38:01,000 --> 00:38:04,000 de sorte que la base de données, MySQL, trouve 686 00:38:04,000 --> 00:38:08,000 quelle pièce d'identité à chaque élève nouvellement inséré est va être. 687 00:38:08,000 --> 00:38:11,000 Je n'ai même pas à se soucier que dans mon code, 688 00:38:11,000 --> 00:38:13,000 et je vais aussi choisir quelque chose dans le menu d'index. 689 00:38:13,000 --> 00:38:17,000 L'indice de descendre a ici primaire, unique, 690 00:38:17,000 --> 00:38:19,000 index et texte intégral. 691 00:38:19,000 --> 00:38:21,000 Vous pouvez peut-être deviner ce que deux ou trois de ces choses, 692 00:38:21,000 --> 00:38:24,000 mais il s'avère que les bases de données relationnelles 693 00:38:24,000 --> 00:38:28,000 vous le programmeur ou l'administrateur de base de données pour obtenir préventive 694 00:38:28,000 --> 00:38:32,000 donner des conseils à la base de données pour ce domaine 695 00:38:32,000 --> 00:38:34,000 dans un tableau sont un peu spécial. 696 00:38:34,000 --> 00:38:37,000 >> Par exemple, dans ce cas, je vais dire que l'ID 697 00:38:37,000 --> 00:38:42,000 va être un index primaire, autrement connu comme une clé primaire. 698 00:38:42,000 --> 00:38:44,000 Ce que cela signifie, par définition, c'est que désormais, ID 699 00:38:44,000 --> 00:38:48,000 va identifier de manière unique les étudiants dans ce tableau. 700 00:38:48,000 --> 00:38:53,000 Aucun étudiant aura le même ID parce que je suis d'imposer cette contrainte ou de cet indice. 701 00:38:53,000 --> 00:38:55,000 Par ailleurs, ce que cela va faire pour moi, c'est que ça va dire 702 00:38:55,000 --> 00:38:58,000 MySQL ID est spécial. 703 00:38:58,000 --> 00:39:03,000 Je me soucie particulièrement sur l'ID, alors allez-y et faire de la magie de votre structure de données de fantaisie, 704 00:39:03,000 --> 00:39:05,000 mettre en place une sorte d'arbre. 705 00:39:05,000 --> 00:39:08,000 En général c'est quelque chose appelé le B-tree, que nous n'avons pas examiné les semaines, 706 00:39:08,000 --> 00:39:11,000 mais c'est une autre structure de données telle dans le même esprit pour les arbres binaires 707 00:39:11,000 --> 00:39:15,000 et tente que nous avons examiné, mais il va dire 708 00:39:15,000 --> 00:39:18,000 à la base de données ce domaine est tellement important que je doute 709 00:39:18,000 --> 00:39:22,000 veulent être en mesure de rechercher sur elle, aller de l'avant et de construire quelque fantaisie 710 00:39:22,000 --> 00:39:25,000 structure de données en mémoire pour accélérer les recherches afin que, idéalement, 711 00:39:25,000 --> 00:39:28,000 ils sont la constante de temps, ou du moins aussi près que possible 712 00:39:28,000 --> 00:39:32,000 de sorte qu'il ne délègue pas dans la recherche linéaire, ce qui ne va pas être 713 00:39:32,000 --> 00:39:34,000 le plus performant approche. 714 00:39:34,000 --> 00:39:37,000 En revanche, l'adresse électronique aurait pu être une clé primaire. 715 00:39:37,000 --> 00:39:41,000 >> En théorie, l'adresse électronique de chacun est unique, sauf si vous partagez une certaine considération, 716 00:39:41,000 --> 00:39:45,000 mais ce n'est généralement pas bon d'utiliser quelque chose comme une chaîne 717 00:39:45,000 --> 00:39:49,000 comme clé primaire, car si son but dans la vie est d'identifier de manière unique 718 00:39:49,000 --> 00:39:55,000 lignes de votre table il n'y a aucune raison d'utiliser au maximum 255 octets 719 00:39:55,000 --> 00:39:58,000 pour identifier quelqu'un si vous pouvez vous en sortir avec seulement 4 octets 720 00:39:58,000 --> 00:40:00,000 ou un int 32-bit. 721 00:40:00,000 --> 00:40:03,000 En général, une clé primaire doit être court et concis 722 00:40:03,000 --> 00:40:07,000 et, idéalement, quelque chose comme un entier ou un grand int, qui se trouve être de 64 bits. 723 00:40:07,000 --> 00:40:11,000 Mais une adresse e-mail doit être unique, et l'une des caractéristiques d'une base de données trop 724 00:40:11,000 --> 00:40:14,000 est d'assurer l'unicité pour moi. 725 00:40:14,000 --> 00:40:18,000 En sélectionnant unique, ici à côté de courriel, même si lui-même par courriel 726 00:40:18,000 --> 00:40:21,000 défile hors de l'écran, je veux dire à la base de données 727 00:40:21,000 --> 00:40:23,000 ne me croyez pas. 728 00:40:23,000 --> 00:40:26,000 Ne me laissez pas insérer dans la base de données 729 00:40:26,000 --> 00:40:29,000 la même adresse deux fois, même si je suis un idiot et ne suis pas 730 00:40:29,000 --> 00:40:32,000 très bon avec mes IFS et IFS else et le code PHP réelle 731 00:40:32,000 --> 00:40:37,000 et j'ai accidentellement laisser l'utilisateur inscrire une adresse e-mail existante 732 00:40:37,000 --> 00:40:40,000 la base de données est encore un autre niveau de la défense pour l'exactitude 733 00:40:40,000 --> 00:40:44,000 afin d'assurer que cette adresse e-mail en double ne se retrouvent pas dans le tableau. 734 00:40:44,000 --> 00:40:49,000 >> Maintenant, par contre, pour le nom que vous n'avez probablement pas envie de faire cette unique 735 00:40:49,000 --> 00:40:51,000 car alors il ne pourrait jamais être 2 Davids ou 2 Smiths Mike, par exemple, 736 00:40:51,000 --> 00:40:55,000 dans votre base de données, de sorte que celui que nous allons laisser seul. 737 00:40:55,000 --> 00:40:58,000 Je vais aller de l'avant et cliquez sur Enregistrer en bas à droite, 738 00:40:58,000 --> 00:41:02,000 et tout semble bon, mais notez ici 739 00:41:02,000 --> 00:41:04,000 c'est une partie que pour l'instant nous ne serons pas passer trop de temps sur 740 00:41:04,000 --> 00:41:07,000 car la syntaxe est un peu complexe, et nous n'avons pas de créer des tables 741 00:41:07,000 --> 00:41:10,000 tout ce que souvent, mais SQL elle-même est un langage, 742 00:41:10,000 --> 00:41:13,000 dont la syntaxe est ici que j'ai mis en évidence. 743 00:41:13,000 --> 00:41:18,000 Qu'est-ce phpMyAdmin fait vraiment, c'est qu'il crée une interface graphique basée sur le Web pour vous 744 00:41:18,000 --> 00:41:23,000 avec lequel vous pouvez gagner du temps et ne pas avoir à saisir manuellement les 745 00:41:23,000 --> 00:41:26,000 une requête SQL assez long comme ça. 746 00:41:26,000 --> 00:41:29,000 >> En d'autres termes, si vous voulez créer manuellement cette table, 747 00:41:29,000 --> 00:41:32,000 soit à ce phpMyAdmin noir et blanc rapide ou même dans 748 00:41:32,000 --> 00:41:35,000 à l'aide de cet onglet autre, cet onglet SQL où vous pouvez taper des requêtes SQL 749 00:41:35,000 --> 00:41:38,000 que vous voulez, franchement, cela aurait pris moi une minute 750 00:41:38,000 --> 00:41:41,000 à réellement se souvenir de la syntaxe entière, et même alors, j'aurais probablement 751 00:41:41,000 --> 00:41:45,000 fait quelques fautes de frappe, alors cet outil est utile pour des choses comme ça, et il est également instructif. 752 00:41:45,000 --> 00:41:49,000 Vous pouvez commencer à déduire ce que la syntaxe est 753 00:41:49,000 --> 00:41:52,000 seulement par la belle couleur de codage que phpMyAdmin est l'ajout d' 754 00:41:52,000 --> 00:41:54,000 pour notre confort visuel. 755 00:41:54,000 --> 00:41:56,000 Mais maintenant, nous allons le faire à la place. 756 00:41:56,000 --> 00:42:00,000 Permettez-moi aller dans l'onglet insertion en haut, et laissez-moi aller de l'avant et insérez par exemple 757 00:42:00,000 --> 00:42:04,000 un ID de, disons-en fait, je ne m'inquiète pas. 758 00:42:04,000 --> 00:42:07,000 Il va incrémentation automatique. Je vais laisser la transaction de base de données à ce sujet. 759 00:42:07,000 --> 00:42:11,000 Mais je serai David, et mon e-mail doit être malan@harvard.edu. 760 00:42:11,000 --> 00:42:16,000 >> Allons de l'avant ici et mettre en Mike Smith comme un autre. 761 00:42:16,000 --> 00:42:18,000 Je vais me donner un nom de famille aussi, 762 00:42:18,000 --> 00:42:22,000 et nous aurons l'être smith@example.com, 763 00:42:22,000 --> 00:42:24,000 et alors où dois-je aller? 764 00:42:24,000 --> 00:42:27,000 Eh bien, il ressemble go est le bouton à cliquer, et le tour est joué. 765 00:42:27,000 --> 00:42:30,000 Avis sur les 2 premières lignes insérées. 766 00:42:30,000 --> 00:42:32,000 Il s'agit de la requête SQL réelle. 767 00:42:32,000 --> 00:42:36,000 C'est l'outil phpMyAdmin exécuté pour moi, 768 00:42:36,000 --> 00:42:40,000 mais le résultat final, un avis, si je maintenant passer à l'onglet Parcourir, 769 00:42:40,000 --> 00:42:43,000 est de voir 2 lignes dans ce tableau, très réminiscent esthétique 770 00:42:43,000 --> 00:42:46,000 de la table, nous avons vu plus tôt pour nos utilisateurs de pset 7, 771 00:42:46,000 --> 00:42:51,000 l'un d'eux est David Malan, dont l'un est maintenant Mike Smith. 772 00:42:51,000 --> 00:42:54,000 Mais juste pour être clair, je n'ai pas besoin d'utiliser phpMyAdmin, 773 00:42:54,000 --> 00:42:56,000 et en effet, vous allez bientôt écrire du code pour pset 7 774 00:42:56,000 --> 00:43:01,000 qui automatise le processus d'ajout de lignes, suppression de lignes, mise à jour des lignes et des autres, 775 00:43:01,000 --> 00:43:04,000 alors laissez-moi plutôt aller dans l'onglet SQL ici 776 00:43:04,000 --> 00:43:14,000 et tapez select * from élèves où 777 00:43:14,000 --> 00:43:18,000 email = "malan@harvard.edu." 778 00:43:18,000 --> 00:43:21,000 >> En d'autres termes Supposons maintenant que vous avez 779 00:43:21,000 --> 00:43:26,000 une certaine forme HTML, et l'utilisateur tape son adresse email, entre autres domaines, 780 00:43:26,000 --> 00:43:29,000 et l'objectif est désormais en PHP sur le code extrémité arrière 781 00:43:29,000 --> 00:43:31,000 à rechercher en fait que d'autres détails de l'utilisateur. 782 00:43:31,000 --> 00:43:34,000 Quel est votre nom? Quel est votre numéro d'identification? 783 00:43:34,000 --> 00:43:37,000 Vous pouvez écrire une requête SQL comme ceci, select * from étudiants 784 00:43:37,000 --> 00:43:40,000 où email = "malan@harvard.edu." 785 00:43:40,000 --> 00:43:46,000 Et si je puis cliquez sur OK, vous remarquerez que je devrais, et en fait je le fais, récupérer une seule ligne. 786 00:43:46,000 --> 00:43:50,000 Mike est omis dans ce jeu de résultats, comme la collection de lignes 787 00:43:50,000 --> 00:43:53,000 est généralement appelé, parce qu'il n'a pas la même adresse email que moi. 788 00:43:53,000 --> 00:43:57,000 >> Maintenant, encore une fois, ici pour pset 7, vous pouvez utiliser phpMyAdmin un outil administratif 789 00:43:57,000 --> 00:44:00,000 et un outil pédagogique pour apprendre votre chemin 790 00:44:00,000 --> 00:44:03,000 dans le monde de SQL, mais à la fin de la journée 791 00:44:03,000 --> 00:44:08,000 vous allez écrire ces requêtes à l'intérieur du code PHP réelle, 792 00:44:08,000 --> 00:44:11,000 et alors restez à l'écoute procédure pas à pas Zamyla en particulier 793 00:44:11,000 --> 00:44:14,000 où vous pouvez obtenir une visite du code de distribution de ce problème posé 794 00:44:14,000 --> 00:44:18,000 où nous vous avons donné non seulement l'esthétique de la page de connexion 795 00:44:18,000 --> 00:44:21,000 et le joli logo sexy qui dit CS50 finances, mais nous avons aussi vous donné 796 00:44:21,000 --> 00:44:24,000 un tas de fonctions qui feront de votre vie un peu plus facile. 797 00:44:24,000 --> 00:44:27,000 Nous avons également écrit une partie de la pset pour vous, 798 00:44:27,000 --> 00:44:32,000 la partie de connexion de celui-ci en particulier, pour vous donner une idée d'un design représentant 799 00:44:32,000 --> 00:44:36,000 qui utilise effectivement un contrôleur, par exemple, index.php, 800 00:44:36,000 --> 00:44:40,000 login.php et autres, et puis vous verrez le pset dispose également d'un répertoire templates 801 00:44:40,000 --> 00:44:43,000 qui a toutes vos vues, toutes les esthétiques. 802 00:44:43,000 --> 00:44:46,000 Et si le flux global dans pset 7 va être que 803 00:44:46,000 --> 00:44:49,000 vos utilisateurs visitent un contrôleur via une URL dans un navigateur. 804 00:44:49,000 --> 00:44:53,000 Ce contrôleur contient du code PHP que vous avez écrit, et à l'intérieur de votre code PHP 805 00:44:53,000 --> 00:44:57,000 peut-être quelques lignes de SQL imbriquées entre guillemets 806 00:44:57,000 --> 00:45:00,000 et transmis à une fonction, nous avons écrit requête appelé 807 00:45:00,000 --> 00:45:03,000 qui vous aidera à parler à la base de données sans utiliser quelque chose comme 808 00:45:03,000 --> 00:45:05,000 un outil d'administration comme phpMyAdmin. 809 00:45:05,000 --> 00:45:08,000 >> Vous serez en mesure d'écrire des instructions SQL dans le code PHP 810 00:45:08,000 --> 00:45:11,000 et obtenir un tableau PHP du jeu de résultats, 811 00:45:11,000 --> 00:45:14,000 des lignes correspondant effectivement à cette requête. 812 00:45:14,000 --> 00:45:18,000 Et de même que vous serez en mesure d'effectuer des insertions ou des suppressions 813 00:45:18,000 --> 00:45:22,000 ou mises à jour ou analogues, la syntaxe pour ce qui est assez similaire, 814 00:45:22,000 --> 00:45:25,000 et vous verrez de certaines références en ligne, à partir de la clé de répartition 815 00:45:25,000 --> 00:45:29,000 et de la pset se emballer exactement comment s'y prendre pour le faire. 816 00:45:29,000 --> 00:45:33,000 Réaliser en fin de compte nous ne faisons qu'effleurer la surface de SQL 817 00:45:33,000 --> 00:45:36,000 et de MySQL, mais la puissance de celui-ci est vraiment ce qu'il vous libère 818 00:45:36,000 --> 00:45:40,000 de se concentrer sur les problèmes que vous voulez résoudre, les cas d'utilisation que vous voulez mettre en œuvre 819 00:45:40,000 --> 00:45:43,000 sans avoir à se soucier tout autant, du moins au début, 820 00:45:43,000 --> 00:45:47,000 où et comment stocker et rechercher votre base de données, 821 00:45:47,000 --> 00:45:50,000 et cela est tout à fait littéralement où Facebook lui-même a fait ses débuts 822 00:45:50,000 --> 00:45:53,000 utilisez MySQL, puis en utilisant plus de serveurs MySQL et encore des serveurs MySQL 823 00:45:53,000 --> 00:45:57,000 avant longtemps, jusqu'à ce qu'ils devaient alors vraiment commencer à penser sérieusement à la manière de 824 00:45:57,000 --> 00:46:00,000 stocker des données, comment stocker des choses encore plus efficace, 825 00:46:00,000 --> 00:46:04,000 si bien que nous allons prendre pour acquis le fait que les index et les contraintes uniques 826 00:46:04,000 --> 00:46:08,000 et ainsi de suite juste travailler il ya une très intéressante conversation 827 00:46:08,000 --> 00:46:12,000 que tout cela peut éventuellement conduire à, donc se rendre compte que nous ne faisons que gratter la surface 828 00:46:12,000 --> 00:46:17,000 de ce qui pourrait éventuellement pour vous ou vos projets deviennent un peu des données importantes. 829 00:46:17,000 --> 00:46:22,000 >> Cela dit, nous allons terminer ici, et nous nous reverrons la semaine prochaine. 830 00:46:28,000 --> 00:46:30,000 [CS50.TV]