[Lecture de musique] DAVID J. Malan: Très bien. Nous saluons le retour. Ceci est CS50. Ceci constitue la fin de la semaine 8. Et comme vous le savez, nous avons assez les heures normales de bureau en quelques des salles à manger, y compris Annenberg. Et une partie de l'équipe de bien vouloir a pris quelques photos ces derniers temps. Et en l'honneur de Halloween, nous avons pensé partager un que plutôt nous a pris par de surprise ici dans Annenberg salle juste l'autre soir. Votre camarade Jacob a posé pour cette photo, mais il était plus amusant était sur Facebook, le suivi la conversation qui a eu lieu par la suite. Son premier poste en réponse à sa photo était-ce. Quelques minutes plus tard, il a décidé à une place lui-même à ce sujet. Il a ensuite ensuite aller à cela, et puis, encore plus amusante est lorsque sa mère intervint. Et puis finalement, il semble que ce fut juste une merveilleuse ruse pour un jouer ce qui se passe. Donc, si vous souhaitez à voir Jacob et d'autres, parmi eux Cynthia Meng, qui est dans les coulisses du personnel de la zone CS50, la tête de cette URL et ce jeu ici. Alors sans plus tarder, aujourd'hui nous continuer ce regard à la programmation web, et la création effective de programmes qui ne fonctionnent pas à la ligne de commande, mais au lieu de fonctionner à l'intérieur d'un navigateur. On peut supposer que maintenant, ou très peu de temps, vous allez d'être au milieu de la mise en œuvre votre propre serveur Web, qui est différente de la programmation web. Le serveur Web dans pset6 est tout au sujet écrire un logiciel qui sait comment prendre les requêtes HTTP à partir d'un navigateur, ou même de vous, un être humain, avec un programme appelé Telnet, et puis répondre à ces demandes soit en crachant sur un fichier HTML ou un jpeg, gif ou un, ou même un fichier .php. Mais avec un serveur web, il est pas censé suffit d'ouvrir un fichier PHP, quelque chose se terminant par l'extension .php, et puis recracher le contenu. Il est censé faire Que ce fichier en premier? Pour ainsi dire. Pas compiler, nous l'avons dit, le lundi, mais rather-- Ainsi, l'interpréter. PHP est un langage interprété, et donc l'une des caractéristiques clés de votre site web serveur, bien mis en œuvre par nous, est cette capacité de votre serveur web à remarquer, oh. Ce fichier se terminant par l'extension .php. Permettez-moi de ne pas vous suffit d'envoyer à la utilisateur comme il est contenu statique, mais permettez-moi de le lire ligne par ligne, de gauche à droite, et de l'interpréter. Et pour ce faire, que vous gars vont essentiellement punt à un programme dans l'appareil, et sur un grand nombre de systèmes informatiques, juste appelé PHP. Tel est le nom de la PHP propre interprète de langue. Donc, cette pièce nous mettons en œuvre pour vous, et ce qui reste pour vous, en fin de compte, est un nombre de pièces, parmi lesquelles met en œuvre le soutien pour le contenu statique. Mais maintenant, et avec problème réglé sept, vous êtes va commencer à la transition vers en train d'écrire le code PHP qui obtient interprété en parler à une extrémité arrière base de données qui stocke les informations. Donc, nous allons mieux comprendre d'abord un couple de ces superglobals et la quantité d'énergie que vous sortir de la boîte gratuitement avec un langage comme PHP. Ce que vous ne devez pas pour vous mettre en œuvre. Ainsi, nous avons vu lundi $ _GET, qui est superglobale, qui est juste PHP parler d'une approche globale variable, vous pouvez accéder n'importe où. Et ce qui est à l'intérieur de $ _GET? Ce qui est à l'intérieur de cette superglobale que nous voyons? Certes, statistiquement à moins une personne sait. Quel est à l'intérieur de $ _GET? Ouais? PUBLIC: Il est des variables vous mettez dans la chaîne de requête. DAVID J. Malan: Parfait. Ce sont les variables que vous mettre dans la chaîne de requête. Ainsi, dans notre exemple plus de réimplémentant Google lorsque nous avons eu une URL, et puis point d'interrogation, qui délimite le début de HTTP paramètres, puis nous avons eu q égal quelque chose, comme q est égal à chats, ce qui passe automatiquement à l'intérieur de que $ _GET super-globale pour vous, en raison de PHP, est une clé de Q, et de la valeur de celui-ci de chats. En d'autres termes, $ _GET et tous ces choses sont des tableaux associatifs, Les tables de hachage de toutes sortes, que stocker les clés et les valeurs. Maintenant, de retour dans pset5, le hachage tableau vous aurait mis en œuvre, ou l'on peut essayer ont mis en place, vraiment était effectivement un associative matrice, une structure de données où vous pouvez associer clés avec des valeurs. Mais dans pset5, les valeurs étaient trivial. La valeur était essentiellement vrai ou faux. Est le mot dans le dictionnaire? Donc, quand vous HASHED un mot comme la pomme à voir si Apple est dans le dictionnaire, votre fonction de vérification probablement retourné vrai ou faux. Donc, voilà effectivement la valeur que nous revenons. Mais nous avons vu lundi brièvement, vous pouvez certainement associer plus intéressant valeurs que tout vrai ou faux avec des clés, comme la pomme. Vous pouvez réellement revenir un chaîne arbitraire, et en effet, qui est ce que $ _GET et ces d'autres variables vous permettent de faire. Donc, $ _POST est dans le même esprit, mais si vous soumettez un formulaire par la poste, une méthode HTTP différente qui est utilisé pour des choses comme les cartes de crédit, et de l'information privée, et même informations binaires comme des photos, ces choses finissent à l'intérieur de $ _POST. Et en fait pour les fichiers comme jpeg et autres joyeusetés, il ya même un autre qui est pas ici appelé $ _FILES ainsi. Ainsi, le serveur nous ne nous attarderons pas trop beaucoup, mais il vous donne accès pour trier des détails de niveau inférieur sur le serveur lui-même que vous utilisez. Cookie et session, cependant, nous verrons effectivement maintenant. La dernière est ce que nous utilisons pour mettre en œuvre la notion de panier. Un super simple, mais rappel que nous avons eu cet exemple ici, compter combien de fois vous avait visité cette page avant. Mais aujourd'hui, plutôt que de simplement regarder l'effet de cette, Ouvrons Inspecteur de Chrome, que vous pouvez généralement faire en cliquant droit ou de contrôle cliquant n'importe où sur une page Web, et puis choisir inspecter élément. Ou vous pouvez aller dans les menus que nous décrivons dans la spec de pset6. Et je vais l'onglet Réseau ici, et nous allons regarder pour un moment le trafic HTTP qui est aller et retour. Permettez-moi d'abord aller de l'avant et le cache de Chrome clair. Donc, certains d'entre vous connaissent peut-être avec cette technique déjà, et nous allons l'utiliser à des fins de débogage ici. Maintenant, nous en ordinateur les scientifiques vont commencer faire pour le débogage application, de sorte que nous allons vider le cache, généralement, de sorte que nous pouvez vous débarrasser de choses cookies. Alors vous êtes probablement familier généralement à ce que les biscuits sont, ou au moins qu'ils existent, mais ce qui est votre compréhension d'entre eux, comme un simple utilisateur de ordinateurs, ce qui est un cookie? Ouais. PUBLIC: Il est un peu de-- bien, pas bit dans un terme d'informatique. Il est un élément de données qu'un site vous envoie afin pour être en mesure d'enregistrer des statistiques sur vous. DAVID J. Malan: OK, bon. Donc, il est un élément de données qu'un serveur, met sur votre ordinateur, et nous allons généraliser même De plus, il est une clé value-- bien, qui devient de plus précis. Il est un morceau de d'informations, un élément de données, un serveur qui est capable à mettre sur votre ordinateur et très souvent, le serveur ne cette façon de se rappeler qui vous êtes. Ainsi, par exemple, les cotes êtes vous êtes probablement connecté à des sites comme Facebook, ou Gmail, ou d'autres avant, et vous vous connectez avec votre nom d'utilisateur et mot de passe, et après cela, pendant un certain nombre minutes ou quelques heures, voire des jours, le serveur se souvient que vous êtes, en fait, connecté. Maintenant, comment est-ce qui se passe réellement? Parce que vous êtes certainement pas retaper votre nom d'utilisateur et mot de passe à chaque fois vous accédez à un autre page sur Facebook. Ainsi, il se le les cookies sont la réponse. Un cookie vous pouvez penser que, un peu comme une main numérique timbre que vous pourriez obtenir à un amusement parc ou un club qui essentiellement indique que vous avez été ici avant, et vous avez déjà montré votre ID pour le videur, pour exemple, et que le club ou le parc doivent maintenant assumer que vous ont déjà authentifié. Vous avez déjà été identifiés par elle. Donc, avec cela à l'esprit, Ouvrons ici contre. Permettez-moi aller de l'avant, je viens de faire, et effacer tous mes cookies. Et maintenant, ce que je vais faire est maintenez la touche Maj, pour faire bonne mesure, et recharger la page force. Maj assurez-vous juste que rien ne se cache. Et voici la demande qui allaient et venaient. Donc, ici, nous avons une demande, et laissez- moi zoom avant ici, et beaucoup de ce est détails sorte de inintéressants pour maintenant que le navigateur a automatiquement envoyé, mais nous allons cliquez sur Afficher Source pour voir les en-têtes premières. Et si vous avez plongé dans pset6 déjà, vous allez certainement reconnaître les choses comme ça, et peut-être quelques-uns de ces autres lignes ici, mais ce qui est plus intéressant pour aujourd'hui si je fais défiler vers le bas, pas à la demande mais à la réponse que l'on appelle, cette ligne ressemble probablement familier. Voilà une bonne chose quand vous voyez un 200 OK. Apparemment, ce est la la date et l'heure sur le serveur et il ya un tas de choses. Oh, voilà qui est intéressant. Met à chaque fois que vous utilisez PHP, au moins à ce serveur, le serveur crache ce version de PHP que vous utilisez. Qui, en fait, pour la sécurité fins, ne sont pas une bonne chose. Mais, nous allons revenir à ce que une autre fois peut-être. Mais maintenant cela est la ligne juteux aujourd'hui, et nous avons vu brièvement quelques-unes de celles-ci, Je pense avec Facebook lorsque nous poked autour de l'inspecteur à ce moment-là, ensemble cookie est ce que l'on plantait ce petit morceau d'information sur votre ordinateur. Ceci est un en-tête HTTP qui est efficace dire à votre navigateur, Chrome, IE, que ce soit, hey navigateur magasin sur l'utilisateur de disque dur, ou dans la mémoire vive de l'utilisateur, une clé appelée PHPSESSID, qui est un notation abrégée pour l'ID de session, et lui donner une valeur de 0vlk8t, point, point, point. Un très long pseudo chaîne alphanumérique aléatoire. Il est juste un très gros chiffre, mais il est codé avec des lettres et des chiffres de sorte que la taille de celui-ci peut être encore plus que les chiffres seuls. Et puis, en passant, Path = /, que signifie simplement que ce cookie doit être associé au intégralité du site, pas seulement un spécifique Cette page toute chose. Donc, ce qui est timbre de main virtuelle. Il est comme si le serveur, Facebook, ou dans notre cas, l'appareil, a littéralement écrit 0vlk8t et ainsi de suite, sur votre main. Notez que le serveur de, ne pas le faire est qu'il est pas stocker mon nom d'utilisateur, certainement ne pas stocker mon mot de passe. Au lieu de cela, il semble stocker des informations pseudo aléatoires de sorte que personne ne peut deviner ce que mon timbre de main est. Du côté serveur, Pendant ce temps, le serveur va rappeler, probablement dans une base de données ou de quelque chose, que l'utilisateur, qui à l'avenir présente un timbre de main de 0vlk8t, point, point, point, devraient être associés à ce notamment panier, pour ainsi dire. En d'autres termes, si je vais maintenant revenir ici et recharger cette page comment le serveur sait que je me suis rendu une seule fois? Ou si je le fais encore, comment le serveur sais que je l'ai visité il deux fois? Eh bien, si je descends à cette plus récente demande, qui est maintenant le troisième que je l'ai envoyé au total, remarque ma demande maintenant. Il est toujours présent demander ici, même comme avant, il ya encore tout un tas des choses que nous avons ignoré comme avant, mais la dernière tête, ce temps, parce que je suis déjà venu ici, est une présentation de ce timbre virtuel de main. Lequel cette ligne ici, pas mis en biscuit mais biscuit côlon PHPSESSI = 0vlk8t, qui est juste mon navigateur est automatique présentation de ce timbre à la main de sorte que maintenant le serveur, dès qu'il se rend compte, ooh, cette est utilisateur 0vlk8t point, point, point, Je peux maintenant me souviens pas qui il ou elle est et réassocier à cet utilisateur quel que soit informations que je veux, et tous cette information peut être stockée par vous, le programmeur, dans $ _SESSION. Donc, pour être clair, si je ouvre réel rapide dans gedit ce fichier réel, counter.php, dans mon hôte local répertoire public comme avant, vous remarquerez que, en effet, Je suis finalement stocker dans $ _SESSION Entre guillemets «contre», la valeur du compteur précédent qui Je reçois de ces lignes ici que nous regardé la dernière fois, plus un. Donc, sous le capot, que ce sont tous les cookies. Il est exactement le genre de numérique timbre de main va et vient, et franchement, si vous ouvrez Chrome Inspecteur sur un site Web vous visitez aujourd'hui, avec très haute probabilité, vous allez peut-être voir un, peut-être une demi-douzaine de biscuits être rappelé par vous. Et pire encore, si ceux site Web que vous visitez avoir toutes les publicités qui est certainement très commun aujourd'hui, et si ces annonces sont à venir de quelque parti central, quelqu'un comme Google AdWords ou comme ils appeler un de leurs produits ou d'autres fournisseurs qui vendre des annonces, ce qui est intéressant, et franchement ce qui est un peu inquiétant, sur la façon dont fonctionne HTTP, est que si vous avez une annonce embarqué dans Facebook.com et Google.com, et Harvard.edu, nombre tout de sites Web, il est si tel qu'il ya un homme du milieu qui purge en place des annonces pour tous les trois de ces sites, il se trouve que la les cookies sont par domaine. Donc si vous avez une annonce à venir de la même entreprise sur différents sites, cette société peut effectivement suivre qui vous êtes sur l'ensemble de ces sites. Harvard pourrait ne pas savoir vous êtes en visite à Facebook. Facebook pourrait ne pas savoir et vous êtes en visite à Harvard. Mais quel que soit le service de publicité Ils utilisent si ce domaine est présent à la fois Harvard.edu web pages et des pages Web, Facebook.com cet homme sait certainement milieu qui vous êtes à cause de ces cookies partagés à travers, ou plutôt à, cette soi-disant intermédiaire. Donc, nous allons revenir sur ce point dans implications pour la sécurité de ceux-ci, mais il ya beaucoup d'informations étant stocké sur vous chaque fois que vous visiter plus une page sur Internet Internet et il a vraiment réduit à ce mécanisme très simple. Qu'est-ce qui se passe, alors, si vous êtes super parano et vous décidez d'aller dans Chrome ou IE ou que ce soit et désactiver vos cookies? Ce qui se produit? Ouais? Vous really-- vous avez fait ce droit? D'accord. Non, aller de l'avant. PUBLIC: Certains sites ne disposent pas une fonction sans elle aime Facebook. DAVID J. Malan: Ouais! Ainsi certains sites Web va simplement arrêter de travailler. Et dans la plupart des sites Web de nos jours qui reposent fondamentalement sur les cookies, surtout si elles ont vous vous connectez , ils vont juste de rompre. Parce que tenir compte de la Subsidiairement, si le site n'a aucun moyen de se rappeler qui vous êtes, et donc votre navigateur est pas représentant à chaque HTTP demande de ce timbre de main, efficacement un site Web comme le cours de Facebook d'avoir pour vous inviter à identifier à chaque fois sacrément vous changez de page, ou cliquez sur un lien, qui est sûrement pas un très bon utilisateur expérience. Alors que, là aussi, est parmi les compromis. Alors sans plus tarder, jetons pour acquis que la programmation web, dans des langages comme PHP, vous pouvez vous souvenir ce genre d'information dans le problème réglé sept lorsque vous implémentez votre propre Site E * Trade-comme permettant d'acheter et vendre des actions, vous vous souvenez exactement ce que l'utilisateur a acheté et vendu et qui il ou elle est par le biais de cette session. Mais nous allons avoir besoin de une façon amateur que le courrier électronique commencer à tenir des informations autour. Droit? Le lundi, nous avons parlé de Frosh GI et comment en version une de ce site, il ya des années, tout ce que nous avons fait était envoyer le Proctor qui est en charge des sports intra-muros programme, le nom et le sexe, et si oui ou non ils sont un capitaine, et le dortoir de quelqu'un qui est l'inscription à un sport intra-muros. Donc, il est pas mal, mais il ou elle a ensuite eu à fouiller dans leur email, faire une feuille de calcul ou quelque chose comme que, pour garder tout organisé. Aussi sûrement que nous en tant que programmeurs peut le faire pour que surveillant. Et donc entrer en SQL, Structured Query Language, qui va faire joli différent à la fois C et PHP, et vous plongerez dans beaucoup plus de mains sur PHP et problème posé sept mais aussi SQL, ou SQL, ce qui est une langue que vous utilisez pour parler à une base de données. Mais ce qui est une base de données? Eh bien, vous pensez à un base de données, au moins pour l'instant, comme étant simplement comme un fichier Excel, ou si vous êtes un fichier Mac numéros utilisateur A, ou si vous êtes un Google Apps utilisateur une feuille de calcul Google, il est effectivement une base de données, ou vraiment en particulier une base de données relationnelle. Une base de données relationnelle est juste ce qui a des rangées et des colonnes, et vous pouvez stocker tout type de ces informations dans les lignes ou les colonnes. Mais ce qui est bien à propos de SQL, et sur les bases de données réelles, et pas seulement des feuilles de calcul ou des feuilles de calcul Google, est que vous pouvez utiliser une langue pour réellement exécuter des requêtes à insérer des données, de supprimer des données, à la recherche de données, même le plus important, et vous ne pas avoir à l'utiliser assez manuellement comme vous le feriez normalement un Google tableur comme ça. Donc, en SQL, il ya un tas de déclarations ou pièces fondamentales de fonctionnalité intégrée. Il ya beaucoup plus de ceux-ci, mais vous pouvez aller une distance énorme tout en sachant que ce langage appelé SQL comporte au moins quatre déclarations, vous pouvez tirer parti. Supprimer, pour supprimer les données, Insérez, par l'ajout de lignes, Mise à jour, pour changer rangées, et à choisir, pour revenir rangées et qui est en fait ce que fait SQL. Il fonctionne entièrement en lignes de manière que lorsque vous insérez ou supprimez, ou mise à jour, ou sélectionner ce que vous êtes revenir comme un soi-disant jeu de résultats, comme un tableau de lignes. Un tas de lignes d'une table. Donc, retour dans la journée, et même à ce jour, vous pouvez interagir avec le base de données en utilisant une ligne de commande, mais il est pas particulièrement agréable à utiliser cette fenêtre de style en noir et blanc et exécuter des commandes en réalité et fouiller votre base de données. Une interface utilisateur graphique, ou GUI, est beaucoup plus préférable, sans doute, et si l'outil que nous recommandons et préinstallé pour vous sur l'appareil est appelé phpMyAdmin. Il est une coïncidence totale que le nom de cette chose a PHP en elle, cela signifie simplement que les gens qui a écrit eux-mêmes ce programme écrit en PHP. Mais il est en fin de compte sur l'administration un serveur de base de données, comme un serveur MySQL que vous pourriez avoir, comme vous faire, dans l'appareil de CS50. Donc, il ya ici plus en détail que nous devons nous occuper aujourd'hui, mais ce qui est important est que sur la gauche côté est une liste des bases de données que vous avez sur votre ordinateur, sur votre appareil CS50, ou venir derniers projets que vous pourriez avoir sur un tiers, une entreprise de site web ou serveur, qui vous pourriez payer pour l'espace. Donc, sur la gauche est la bases de données, dont l'un est pset7 que je emprunté à côté pset semaines, et ensuite sur le dessus il remarque qu'il ya une tas d'onglets, dont l'un est bases de données, SQL, statut, utilisateurs, l'exportation et ainsi de suite. Ainsi, vous pouvez aller un long façon juste par la réalisation que la majeure partie de l'interface utilisateur est dans la colonne en haut à gauche et dans la partie supérieure droite là-haut. Alors, que pouvons-nous réellement faire avec ça? Eh bien, nous allons commencer la création d'un bit d'information de la manière suivante. Supposons ce qui suit est le cas, comme ce sera dans quelques jours, vous voulez mettre en œuvre une site Web, appelé CS50 Finances, et ce site vous permet d'acheter entre guillemets et vendre des actions. Et il va comprendre le prix de ces stocks, en fin de compte comme vous le verrez, en parlant de Yahoo Finance. Qui, merveilleusement, dispose d'un service gratuit où vous pouvez passer à un téléscripteur comme GOOG pour Google, et il sera vous redonner le stock actuel de Google prix dans le passé quelques minutes au moins. Donc, vous en aurez besoin, en fin de compte, faire semblant de l'utilisateur d'acheter et de vendre réelle les stocks à l'aide de l'argent virtuel, mais la première chose l'utilisateur va voir est-ce l'écran de connexion qui leur demande pour leur nom d'utilisateur et mot de passe. Et donc, l'un des premiers défis pour vous dans pset7 va être de mettre en œuvre l'arrière base de données, la feuille de calcul si vous voulez, cela va stocker des noms d'utilisateurs et mots de passe et, finalement, ce que les stocks qu'ils possèdent, et combien, et combien d'argent ils ont, si un tas d'autres choses dans autres tables, ou des feuilles de calcul. Donc, nous allons jeter un oeil à la façon dont cette pourrait apparaître à première vue. Je vais revenir à l'appareil et je suis va aller à cette URL ici phpMyAdmin localhost / phpmyadmin et vous verrez que ce me prend pour une interface exactement comme nous l'avons vu sur la capture d'écran, et ici je avoir une base de données supplémentaire appelé conférence pour aujourd'hui et laissez-moi aller de l'avant premier et cliquez sur pset7. Il me semble avoir deux options, un pour les nouveaux, pour créer une nouvelle table, et un lien pour les utilisateurs, qui est une table je l'ai déjà créé. Alors qu'est-ce qu'un tableau? Donc, si vous avez utilisé Excel avant, et si vous avez numéros utilisés ou Google Tableur, vous ouvrez une fenêtre et vous obtenez tout un tas de lignes et de colonnes, mais alors vous avez généralement des feuilles de calcul le long de la partie inférieure, ou des onglets séparés. Vous pouvez penser à chaque feuille de calcul sous forme de tableau de sorte que la base de données, en définitive, est un combinaison d'une ou plusieurs tables, une ou plusieurs feuilles de calcul, dans la monde d'une feuille de calcul normal. Alors laissez-moi aller de l'avant et cliquez sur cette fiche que je préfabriqués, appelés utilisateurs, alias table de base de données. Et si je fais défiler ici, permettez-moi de faire un zoom arrière un peu, voilà ce que phpMyAdmin est dit nous est à l'intérieur de cette table en ce moment. Il est un peu déroutant au premier abord coup d'œil parce que l'interface est pas la plus belle chose au monde, mais ce qui est intéressant est cette partie ici. ID, nom d'utilisateur, et hachage. À l'avance, et vous serez main ce problème réglé en sept, nous vous donnons un fichier contenant un Super petite table de base de données, en fait emprunté de l'édition pirate de problème mis deux, à l'intérieur de laquelle il existe six rangées. Un pour Belinda tous les chemin vers le bas à un pour Zamyla, et remarquer à la gauche de ceux les noms d'utilisateurs sont des identifiants uniques comme un, deux, trois, quatre, cinq, six, nombres entiers, et puis à droite sont des hashs. Et si, les chances sont, vous ne l'avez pas le problème de l'édition pirate mis deux, mais une table de hachage est juste comme un cryptée mot de passe avec quelques mises en garde. Et donc, ce que vous voyez ici sont les versions cryptées de l'ensemble des six de nos mots de passe de problème HACKERSAFE l'édition de deux. Maintenant à gauche est juste une interface graphique, éditer cette ligne, la copie de cette ligne, la suppression de cette ligne. Mais ce qui est intéressant Il est maintenant la suivante. Je ne peux réellement commencer l'expérimentation de ce tableau. Donc, si je vais et clique sur le SQL onglet, je reçois cette grande zone de texte. Et ce ne sont pas la façon dont nous allons faire lors de l'écriture en fait le code. Pour être clair, phpMyAdmin est juste un outil qui est va nous fouiller la base de données et nous expérimentons avec des requêtes. Ainsi, par exemple, supposons Je exécute exactement cela. Select, qui est l'un de ceux mots-clés je l'ai mentionné plus tôt, étoiles, qui représente tous les colonnes d'une table. De ce tableau? Eh bien, les utilisateurs. Et il ya cette avis convention bizarre dans SQL où vous utilisez réellement tiques arrière, généralement, citations pas simples et doubles guillemets pas quand vous parlez de noms de tables, de sorte que le dos citation est la chose sur le main en haut à gauche de votre clavier plus probable. Alors laissez-moi aller de l'avant maintenant et il suffit de laisser ce seul et faites défiler vers le bas et cliquez sur Go, et nous sommes effectivement aller voir la même chose. Nous venons exécuté une requête SQL dire tout sélectionner étoiles de tableau appelé les utilisateurs, et ce que vous obtenez en retour est la suivante. En fin de compte, nous serons en mesure de faire la même chose dans le code, mais pour l'instant tout ce que je voulais Do a été le voir dans mon navigateur. Eh bien nous allons faire quelque chose un peu différent. Permettez-moi de revenir à l'onglet SQL, et disons juste que quoi? Zamyla a perdu tout son argent, et il est donc temps pour nous de l'effacer en tant qu'utilisateur. Elle ne vous connecter. Alors je vais dire supprimer de-- ainsi, maintenir la capitalisation par souci de cohérence, supprimer des utilisateurs où. Et ainsi, nous pouvons avoir ces prédicats, ou ceux-ci qualifications, à la fin de ma déclaration où et comment pourrais-je supprimer Zamyla? En son nom Zamyla, de sorte que le colonne, l'une des colonnes a été nommé, alors où name = "Zamyla". Et là, je l'utilise deux fois des citations ou des apostrophes, vous utilisez uniquement le dos quand ticks parler des noms, par exemple, des tables ou des champs. Et permettez-moi de cliquez sur Go ici. Et maintenant, la page Web est être un peu tendu. Ou, voulez-vous vraiment à exécuter la commande DELETE des utilisateurs dont le nom est égal Zamyla? Oui. Alors maintenant, si nous revenons à ma table par les utilisateurs cliquant, vous remarquerez que Hm. Je fait une gaffe. Et en fait, je genre de cliqué si vite vous avez même pas vu le message d'erreur rouge, peut-être. Qu'ai-je fait de mal? Public: Vous avez pas besoin de capitaliser son nom. DAVID J. Malan: Ouais, je capitalisés son nom, mais son username-- fait je fait quelques erreurs, non? Un, son nom d'utilisateur est zamyla, Z minuscules, et le nom de la colonne est le nom d'utilisateur, ne nommerai pas, nous allons donc le faire à nouveau. Permettez-moi aller de l'avant et supprimer des utilisateurs où nom d'utilisateur égale entre guillemets "Zamyla". Bien? Donc, cela ressemble un peu mieux, laissez moi aller défiler vers le bas et cliquez sur OK. Il va encore me crier dessus pour être sûr. Je clique sur Oui, et nous voyons maintenant, franchement ce qui est arrivé, vraiment rapide, moins d'un deuxième certainement, cette est exactement la requête qui a obtenu exécuté. Pour confirmer, permettez-moi sur Utilisateurs et bien maintenant Zamyla est parti. Maintenant, nous allons faire le contraire. Supposons que Gabe veut enregistrer pour le site. Quelle est la requête SQL, ce qui est la commande je pouvais taper à ajouter Gabe? Eh bien, il est assez simple. Insérer dans les utilisateurs, et maintenant il est un peu énigmatique. Je dois préciser, pour le serveur, Quels sont les domaines que je veux attribuer. Je ne me soucie pas vraiment ce que Gabe ID nombre est, donc je vais sauter cette. Je vais dire à la place nom d'utilisateur, hachage, puis les valeurs que je veux mettre il va être Gabe. Et puis son hachage, je ne sais pas. Donc pour l'instant, je vais laisser que comme un grand à faire. Nous y reviendrons que régler le problème spec sur la façon dont vous avez réellement le faire. Donc remarquer, encore une fois, la syntaxe. Insérer dans le nom de la table, puis un liste entre parenthèses des champs, les colonnes que vous souhaitez ajouter valeurs à, et puis juste le même ordre de gauche à exact droit des valeurs que vous souhaitez ajouter, et il est juste parce que l'emballage le texte est un peu long. Alors maintenant, laissez-moi cliquez sur OK. Une ligne insérée. Et maintenant, si je reviens à utilisateurs, ce qui est intéressant est que non seulement il est maintenant dans la Gabe base de données, ce qui est apparemment son identité? Eh bien, il est sept heures. Pourquoi est-il sept ans quand je ne suis pas l'ajouter? Donc, cela, aussi, est l'un des fonctionnalités que vous obtenez de la base de données. Un grand nombre de fonctionnalités intégrées. Il se trouve que lorsque créé cette table, Je préconfigurés il est automatiquement attribuer un ID de telle sorte qu'il incrémente. Donc, si vous avez déjà poussé autour, et regardé ce que votre ID Facebook nombre est, de nos jours il n'y a pas vraiment une chose à faire, mais comme une API Facebook, Interface de programmation d'application, lequel vous pouvez revenir tout un tas de données sur vous-même, vos amis, et vos connexions. Et ce que l'on sorte cool, retour dans la journée, était à chercher ce que votre Facebook numéro d'identification était. Mark Zuckerberg de, par exemple, est trois depuis qu'il était l'auteur du site. Et comme l'histoire, il a créé deux comptes de test, les utilisateurs un et deux, qu'il a ensuite supprimé. Et donc, Zuck, comme son nom d'utilisateur sur Facebook, est ID numéro trois, et nous avons tous des chiffres beaucoup plus plus de trois de ces jours. En fait, à un moment donné Facebook éloigné de même en utilisant un int, qui est une valeur de 32 bits, à l'aide la prochaine étape, essentiellement un temps long pour qu'ils puissent accueillir encore plus de l'enregistrement des utilisateurs. Donc un peu fait historique plaisir. Voilà donc tout le syntaxe de base avec laquelle nous pourrions exécuter un couple de requêtes, mais nous pouvons faire un tas d'autres choses avec SQL. Et vous verrez, en fin de compte, dans le problème posé sept que vous avez à faire un nombre de décisions de conception, d'entre eux va être les types de données à utiliser. Ainsi, tout comme en C, il existe des données types dans une base de données, comme MySQL, et les types de données que vous avez à choisir De inclure ces domaines ici. Char, varchar, Int, grand int, décimal et l'heure de ce jour, et bien d'autres. Donc, nous allons effectivement le faire. Imaginons que nous ne l'avons pas tableau de cet utilisateur de main vous et laissez-moi aller de l'avant et de créer, pour moi-même, dans les conférences database-- en fait je vais aller de l'avant et supprimer la table, je dois ici déjà de sorte que nous pouvons créer ce fichier. Oups. Je vais laisser tomber cette table, et maintenant je suis va aller de nouveau à la conférences base de données ici, Je vais créer une table appelés utilisateurs et nous allons il suffit de faire trois colonnes initialement et cliquez sur OK. Or, pour la plupart, encore une fois, cela est juste utilisation de cet outil graphique appelé phpMyAdmin, et ce que nous faisons maintenant est la création d'une table. Donc ce fichier est comme aller, Nouveau, et la création d'un nouveau fichier Excel. Donc, il me demande un peu questions, de gauche à droite, quel est le nom de la première colonne, puis le nom de la deuxième colonne, et le nom de la troisième. Donc, nous allons recréer cette. ID, puis le nom d'utilisateur est l'un, et puis hachage est une autre. Donc, ce qui devrait le type de données être maintenant un domaine comme ID? Voici la liste complète des types de données disponibles dans une base de données, et pour l'instant nous allons juste aller avec int. Valeur 32 bits, je ne sais pas pense que je suis réaliste va avoir plus de 4 milliards utilisateurs dans mon compte, dans mon service, donc je vais continuer à avancer à la question suivante. Je ne vais pas préciser une longueur ou valeurs, il est pas applicable ici pour un int, en soi. Et maintenant, je peux préciser, apparemment, un défaut valeur, que je ne vais pas préciser. Un classement, je ne sais pas ce qui est. Un attribut. Maintenant, nous faisons réellement avoir une décision de conception. Donc, il ya quelques champs ici, pas tous de qui sont applicables, mais non signé signifie simplement que quoi? Que le int doit être? Tout non-négatif. Donc, il doit être sur 0 jusqu'à. Non, je ne vais pas vérifier parce que Je veux que chaque utilisateur d'avoir une pièce d'identité, il ne peut pas être nulle. Et puis, nous arrivons à un peu plus les décisions de conception intéressants aiment. Nous y reviendrons dans un instant, mais ce que l'autre caractéristique de base de données est, est-ce que vous pouvez dire le serveur de base de données aller de l'avant et optimiser vous-même, votre RAM et espace disque dur, de sorte que sélectionne et inserts, et supprime, et les mises à jour sont vraiment rapides. Cela contraste avec pset5. Si vous voulez chercher quelque chose dans votre table de hachage, qui vous pensez à une base de données, qui a dû faire tout le travailler pour faire de votre table de hachage rapide. Il est comme, évidemment, vous. Droit? Il fallait mettre avec toutes les nuances de temps réglage choses, obtenir une fonction de hachage droit, à trouver comment de seaux d'avoir. Mais ce qui est bien, encore une fois, sur une base de données est vous botté de dégagement juste tous ce à d'autres personnes qui ont pensé que ce à travers pour vous, et ce Je vais dire ici sous indice est que mon champ ID va être le principal moyen de l'identification des utilisateurs dans cette base de données. Je ne vais pas penser de Zamyla comme Zamyla, Je vais penser à elle comme le numéro 6. Pourquoi est-il, peut-être, mieux intuitivement penser et modèle chacune des rangées individuelles en utilisant votre un nombre au lieu de quelque chose comme une chaîne, comme le Zamyla ou Gabe ou plus encore la chaîne? Ouais? PUBLIC: Un ID est unique? DAVID J. Malan: répète? PUBLIC: Un ID est unique? DAVID J. Malan: Un ID est unique, mais suppose-- selon le cas, en général, avec les noms d'utilisateurs, supposons Je disais aussi, il ne peut y avoir une Zamyla dans le monde, et un seul Gabe. Je pouvais imposer l'unicité contrainte sur les cordes, trop, si je le voulais. Donc pas une mauvaise pensée. PUBLIC: Plus sécurisé. DAVID J. Malan: Plus sûr, pourquoi? Public: Vous ne pouvez pas dire qui est qui, comme dans le mode. DAVID J. Malan: OK, vous ne peut pas dire que l'utilisateur est ce qui il ya donc une la vie privée aspect à elle, en particulier si les ID peut être apparaissant dans les URL. Alors bien sûr, qui pourrait genre de travail, trop. D'autres pensées? Ouais? PUBLIC: Il est plus facile de effectuer des opérations sur un int. DAVID J. Malan: Ce est le botteur réel. Il est un peu plus efficace, ou plus facile pour l'ordinateur, à effectuer des opérations sur un nombre entier. Droit? Un int est garanti à de 32 bits, alors que Zamyla est quelques caractères, Gabriel est un peu plus de caractères, Davenport est vraiment longue, et il est donc pas particulièrement efficace d'utiliser chaînes à comparer les valeurs et l'air pour les champs et les champs de mise à jour, si vous pouvez vous en sortir avec juste un nombre entier. Situé à 32 bits. Donc, les noms d'utilisateurs, aussi, de cette façon, ne doivent pas être unique, mais ils devraient probablement être, et même de cette façon trop un utilisateur peut être autorisé à changer son nom d'utilisateur. Laissons donc maintenant ce que le premier moyen d'identification de l'utilisateur. Ceci est dit la base de données aller de l'avant et d'optimiser vous-même ainsi que Look up sur ID sont super rapide. AI, horriblement nommé, juste signifie incrémentation automatique, et cette vérification est le Box nous devons vérifier pour indiquer que le champ d'identification de automatiquement mis à jour pour moi, et puis je vais défiler vers la droite ici et franchement, je ne suis pas vraiment intéressé en plus de ces domaines. Certainement pas aujourd'hui. Donc, je vais revenir ici, à la première colonne, où Je dois préciser nom d'utilisateur et hachage, et nous allons au moins l'accent sur la deuxième pour le moment. Int est probablement pas le droit d'appel, Donc ce qui fait plus de sens peut-être? PUBLIC: texte. DAVID J. Malan: répète? PUBLIC: texte. DAVID J. Malan: texte? OK, je entendu texte. Quoi d'autre? Nous avons une sorte de tas de choix qui sont de nature textuelle. Alors, quand, et pourquoi, faire vous utilisez certains de ceux-ci? Eh bien char, contrairement à ce que vous pourriez penser, est pas un caractère unique. Il est un nombre déterminé de caractères. Donc, si nous savons que tous les noms d'utilisateur doit être comme huit caractères, comme autrefois commune en plus systèmes informatiques, je pourrais dire l'omble et alors je pourrais dire 8 ici. Voilà quand la troisième colonne devient applicable lors de la création d'une table. Mais qui est assez ennuyeux parce que certaines personnes pourraient veulent avoir un nom d'utilisateur plus de huit caractères, certaines personnes pourraient vouloir avoir un nom d'utilisateur plus court, alors pourquoi me commettre pour un nombre spécifique? Pourquoi ne pas avoir une variable nombre de caractères et juste dire que la longueur maximale d'un nom est, je ne sais pas, comme 64 caractères. Je ne peux pas penser à des amis qui avoir des noms plus de 64 caractères, et même si cela est trop courte, il pourrait certainement augmenter jusqu'à arbitrairement. Donc varchar est une variable nombre de caractères. Textes ne sont pas un mauvais instinct, et franchement ce genre de fait ce qu'il dit, mais un champ de texte peut être comme 65 000 octets au moins. Voilà probablement excessif pour un champ, et en fait, ouais, 65535. Voilà probablement excessif pour un nom, afin que nous nous en tiendrons, généralement, avec varchars pour textuelle domaine et hachage, aussi. Hash, il se trouve, nous pourrions faire un varchar aussi bien ou quelque chose comme ça, mais nous ne nous concentrerons pas aujourd'hui sur la cryptographie et il les numéros que nous pourrions réellement souhaitez utiliser pour sa longueur. Mais permettez-moi de faire défiler vers le bas à droite. Vous ne pouvez avoir une index primaire pour une table, mais ce que je veux appliquer toutes ces choses, maintenant, pour nom d'utilisateur, diriez-vous? Quel devrait username être fondée sur une vague la compréhension de ces quatre options? Par leur nom? PUBLIC: Unique. DAVID J. Malan: si unique, non? Donc, il se trouve que non seulement possible vous dites une base de données, à l'avance, ce est le principal moyen l'identification de domaines. Vous pouvez également dire que ce est va être un domaine unique. Il ne va pas être la chose que je compte sur, mais je voudrais la base de données essentiellement avoir que si la condition, si que si jamais je essayé de s'inscrire deux utilisateurs avec le même nom, la base de données à plat ne va pas me laisser faire. Je pourrais avoir un peu de code supplémentaire en PHP qui empêche autant, mais la base de données, trop, peut assurer que ce ne va jamais se produire. Maintenant, en passant, d'autant plus que vous pensez derniers projets, garder à l'esprit indice et complet texte sont en fait très utile. Si vous avez une grande base de données, pas de des dizaines, mais des centaines ou des milliers voire des millions de domaines, vous pouvez dire aussi la base de données à l'avance ceci est un domaine que je vais être à la recherche sur un terrain. Peut-être que son nom d'utilisateur, Peut-être qu'il est bio, si vous êtes faire un site web Facebook-like qui a paragraphes que l'utilisateur est autorisé pour sauver, et si vous voulez dire la base de données à l'avance Je vais être à la recherche dans ce domaine beaucoup, mais pas nécessairement unique, vous pouvez spécifier me créer un index. Ou, vous pouvez dire aussi me permettre de faire sorte de fouilles arbitraires comme commande ou de contrôle F, comme vous pourrait dans un traitement de texte, de sorte que vous pouvez regarder des chaînes arbitraires ou chaînes dans ce domaine. En d'autres termes, nous obtenons au point au cours du semestre où vous ne devez pas vous inquiéter au sujet de comment mettre en œuvre les choses efficacement. Vous avez juste besoin de savoir ce les décisions de conception à faire en sorte que vous êtes en utilisant les bons outils pour le commerce afin de tirer parti des fonctionnalités que d'autres personnes ont construit pour vous. Donc, pour résumer, primaire devrait seulement avoir un, vous pouvez avoir un seul, et il est la chose que vous vous engagez à à l'aide de champs identifiant de manière unique. Unique est juste dans le même esprit, mais vous pouvez uniquement utiliser de temps en temps, mais vous voulez que la base de données de l'imposer. Indice signifie simplement préventivement accélérer les choses dans l'avenir afin que je puisse rechercher les choses dans ce domaine. Et puis le texte intégral est généralement paragraphes, ou des essais, ou de grands organismes de texte où vous pourrait aussi avoir cartes sauvages comme l'équivalent de l'étoile. Droite. Alors que était un peu beaucoup à tous à la fois. Voyons voir si nous ne pouvons pas distiller un couple de ces caractéristiques et puis construire quelque chose assez simple, mais puissant. Donc, parmi les autres les décisions de conception vous êtes finalement devoir est long les lignes de moteurs de stockage. Et permettez-moi de faire mention de cette en prévision de projets de fin, et l'anticipation des let de say-- ne faisons ceci. Bâtissons ce petit première application. Je vais aller dans mon terminal fenêtre, et en voici pas seulement counter.php, qui nous allons maintenant de se débarrasser de ne plus germane, mais nous avons tout un tas de répertoires et de ce va être très similaire dans l'esprit à ce que vous verrez dans sept problème posé. Nous avons donc trois répertoires comprend public et des modèles, qui est exactement là où nous nous sommes quittés sur Lundi, avec l'ensemble de notre paradigme MVC. Et pour rappel, en public va aller tout fichier que je veux que les utilisateurs réellement v être en mesure de visiter en leur navigateur via une URL. Template. Qu'avons-nous mis dans les modèles? Quel genre de choses? Il n'y avait pas beaucoup, mais un couple fichiers au moins lundi. Ouais. PUBLIC: En-tête et pied de page? DAVID J. Malan: En-tête et pied de page. Nous avons donc quelque chose de semblable aujourd'hui, trop. Nous avons un peu plus de fichiers, mais Pied de page, je vois, je vois tête, et puis un tas d'autres fichiers. Donc, ce qui équivaut de la vue V MVC, qui, encore une fois, sera un peu plus clair dans le problème réglé sept, mais ceci est juste un dossier que je suis mettre beaucoup de mon esthétique. Une grande partie de mon HTML, beaucoup de mes formes. Pendant ce temps, comprend, est un autre répertoire qui a ces trois fichiers et nous allons jeter un coup d'œil à ces. Je vais aller de l'avant et ouvrir le fichier config.php. Comme il se trouve, beaucoup comme plus tôt dans la durée, vous pointu inclus CS50 point h avec pset7. Dans l'exemple d'aujourd'hui, vous allez à faire l'équivalent de ce que avec un require efficacement que comprend ces plusieurs lignes. Donc, pour être clair, cela est un fichier appelé fichier config.php. Et remarquez ce qu'il fait. Il est apparemment de faire quelque chose , en tournant sur les messages d'erreur incompréhensibles de sorte que vous pouvez les voir dans le navigateur. Il est, alors, apparemment nécessitant deux autres fichiers si cela est comme #include en C, et puis ce que nous avons vu, et nous avons compté sur, ceci permet d'activer qui panier comme fonctionnalité. Cela signifie une volonté de cookie être envoyé avant et en arrière. Alors, pourquoi est-ce intéressant? Eh bien, si nous revenons à cette répertoire et ouvrir, par exemple, constance.php. Notez que PHP ne constantes de soutien, il est pas tout à fait comme #define en C Au lieu de cela, vous littéralement dire défini, et avis que je l'ai stocké à l'avance quatre constantes dans ce fichier. Un pour la base de données d'aujourd'hui, pour mon mot de passe, pour mon nom, et le nom du serveur. Donc, ce sont en fait vont être assez similaire à problème posé sept. Et enfin, et ceci est où je suis allez obtenir quelques belles fonctionnalité du personnel, dans functions.php est un tas de code que nous avons écrit, et je volé une partie de cette de problème mis sept pour aujourd'hui, qui fait un tas de choses et nous allons simplement regarder l'un d'eux en particulier. Cette fonction ici, requête, va être la fonction PHP que nous appelons pour exécuter SQL. Il ya un moment où nous étions à l'aide phpMyAdmin, mais qui est juste de tri des fins d'apprentissage des fins de diagnostic et et oublier votre ensemble de base de données. Lorsque vous utilisez réellement votre base de données, vous, l'humain, ne sont évidemment pas aller à tirer un web Cette page chaque fois que quelqu'un enregistre. Vous allez écrire du code qui inserts et supprime les utilisateurs sur demande, et nous allons faire ce par l'intermédiaire de la fonction d'interrogation. Si je fais défiler vers le bas maintenant, il ya va être un peu plus de fonctionnalités. Rediriger va une fonction que nous avons écrit pour vous qui vous permet de envoyer l'utilisateur vers une autre URL, et rendre est une fonction, tout comme nous avons vu lundi, qui rend en fait un modèle, mais plus sur ceux-ci dans la forme de propre pied pset7 travers. Pour l'instant, nous allons aller de l'avant et le faire. Laissez-moi aller dans mon tableau de conférences et voir qu'il n'y a rien pour le moment ici pour l'instant, et laissez-moi aussi aller dans mon répertoire public, où il ya juste un fichier index.php. Ce fichier semble être super simple pour le moment, il semble juste comme ça. Très semblable à la façon dont nous gauche de lundi. Je nécessitant ce fichier, config.php, qui se trouve dans un répertoire comprend, qui est en dot dot, mes parents, et alors il est juste de rendre ce fichier. Alors, quel est ce dossier? Ouvrons dans mes modèles form.php, et nous verrons cela. Super simple, apparemment, cette forme est va présenter par un $ _GET ou $ _POST. Test de cohérence rapide. Littéralement rechercher visuellement le fichier. Méthode égale poste. Donc, ça ne va pas à utiliser l'URL, comme Google est le cas, il va trier de cache les informations derrière les scènes et il est va se soumettre à un fichier appelé register.php, et qui est le fichier nous avons pas encore écrit mais ce que cela va pour ressembler est la suivante. Si je vais à une page séparée Ceci est ce localhost / index.php ressemble. Et encore une fois, le serveur de juste en supposant index.php. Entrez. Voilà donc où nous en sommes à, et ce que je veux faire est en mesure de saisir les choses comme David, et puis mon numéro de téléphone, qui dira 617-555-1212 pour l'instant, inscrivez-vous et maintenant register.php n'a pas été trouvé. Je dois donc mettre en œuvre. Donc, nous allons fouetter rapidement quelque chose comme cela. Laissez-moi aller dans mon répertoire public et faire de gedit register.php, et maintenant je vais aller de l'avant et lancer le mode PHP, comme nous l'avons fait le lundi, et la balise de près PHP, et faisons un certain nombre de choses. Alors là, je sais, à partir de avoir écrit cette forme, que je veux vérifier les points suivants. Si elle est vide, quelle que soit l'utilisateur tapé dans le champ Nom, puis Je vais dire quelque chose comme se excuser manquant nom. Apologize, quant à lui, est pas intégré dans PHP chose, il est une fonction que nous avons écrit dans functions.php pour pset7 de sorte que vous avez accès. Sinon, si l'autre domaine est vide, le numéro, puis je suis va présenter des excuses à la utilisateur et dire nombre manquant. Enregistrez ce fichier. Maintenant, revenons à mon navigateur, revenir à la tribune essayer à nouveau. Créer. D'accord. Rien ne se passe, ce qui est bon. Je ne reçois un message d'erreur. Mais si au contraire, nous allons Recharger cette la page et ne pas offrir quelque chose. Bon sang. Faire. Créer. Qu'ai-je fait de mal? Si vide, le nom $ _POST. Dire encore? Oh, bien sûr. Je oublié la partie la plus importante, qui est require ("../ includes / config.php."). Je besoin d'avoir accès à la excuser fonction, qui est pourquoi rien ne se passait. Ne existe pas réellement la fonction. Essayons donc de ce message. Disons rechargez la page, cliquez sur Enregistrer. D'accord. Il est là. Ainsi, la sortie nous sommes voir ici est le résultat d'appeler une s'excuser fonction, super simple, et il se contente d'afficher quoi que Je lui donne comme argument. Très bien, nous allons donc coopérer. Donnons mon nom comme David, inscrivez-vous, manquant numéro OK let de prévoir que, trop. 617-555-1212. Créer. D'accord. Donc, tout va bien maintenant, juste rien intéressant se passe. Alors maintenant, nous allons faire quelque chose de plus intéressant se passer comme ça. Laissez-moi aller dans phpMyAdmin, et de laisser en fait créer une table appelée utilisateurs, Je vais donner trois colonnes, et je vais rapidement créer des ID, puis nom, puis le numéro, et le champ ID je suis va laisser comme un int. Le champ de nom, je vais pour laisser un varchar, et nous dirons 64, quelque peu arbitraire. Le nombre que je vais à faire, vous savez quoi? Nous allons en soutenir chiffres américains ici, donc je vais faire quelque chose comme l'omble chevalier et puis 10 caractères max pour un code de zone puis sept chiffres. Et puis ici, je vais préciser incrémentation automatique ce domaine, faire une clé primaire, et Je vais aller de l'avant et ne pas vérifier un de ces autres boîtes. Alors, quand je enfin cliquez sur Enregistrer, et je reviens à ma table des utilisateurs, voilà ce que ça ressemble si je maintenant cliquer sur une structure un nouvel onglet. Donc, cela, pour être clair, est juste manière de phpMyAdmin de dire votre table de base de données a une identité, un nom, et un certain nombre avec ces configurations particulières et nous allons ignorer le reste des champs là pour l'instant. Alors maintenant, qu'est-ce que je veux faire? Donc, si je vais maintenant dans mon code source, si tout va bien Je veux exécuter la requête suivante. Insérer dans, et je ne peux disent les utilisateurs Je ne le font pas strictement besoin de ceux qui sont restés ticks si elle est pas un mot dangereux comme les utilisateurs. Je vais vous dire le nom, nombre, et puis ici je suis ne va pas coder en dur le chiffres des valeurs encore. Je vais mettre deux points d'interrogation. Et cela est une convention dans de nombreuses langues laquelle, si vous voulez avoir un espace réservé pour une chaîne vous allez utiliser la question marques, pour des raisons nous allons revenir pour discuter de sécurité, et ici Je vais passer à ceux deux champs affichent nom, et puis après nombre, et maintenant enregistrer le fichier. Et maintenant, je vais descendre ici est super simplement dire rendersuccess.php, qui va être un autre modèle. Je vais créer très vite. Geditsuccess.php et je vais à-dire le succès de H1 dans ce fichier. Bien. Alors maintenant, revenons à la navigateur, où je me suis rendu avant. Allons de l'avant et je l'ai écrit confirmer dans David, je l'ai écrit dans un numéro de téléphone, enregistrer. Bon sang. Qu'ai-je fait de mal? Donc, je vois une erreur ici, vous avoir une erreur dans votre syntaxe SQL. Permettez-moi de revenir au gedit, je Je reviens à register.php, et qu'est-ce que je laisse de côté que était important dernière fois? Je besoin de cela. Vous voulez savoir ce que les autres que de Ayant remarqué avant, mais je besoin de cela. Alors maintenant, revenons, et ce était utile de voir dans le navigateur et voilà pourquoi dans config.php nous cracher erreurs. Allons de l'avant et de rechargement, cliquez sur Continuer, le succès. Alors maintenant, laissez-moi aller à mon base de données ici et cliquez sur Utilisateurs, et parcourir, et je remarque maintenant avoir David dans ma base de données ici. Maintenant, techniquement ce site est pas encore sur le réseau Internet public, donc je ne peux pas avoir d'autre personnes à mettre ici, mais si je voulais maintenant, pour exemple, envoyer moi un message texte. Allons sur une branche ici et voir si cela fonctionne réellement. Je vais aller de l'avant et supprimer cette ligne et nous brouiller cette dans la vidéo plus tard si nous ne disposons pas de la Internet tout entier me textos, et nous allons maintenant passer à la navigateur et nous allons passer à la leçon et nous tapons dans différents nombre ici, inscrivez-vous, le succès. Alors maintenant, mon numéro est probablement en la base de données, et maintenant la partie amusante. Nous allons utiliser PHP en fait à faire quelque chose programmation, soit à partir de la commande ligne ou d'ailleurs, et pour l'instant je suis juste va garder les choses simples et je vais aller dans ma répertoire ici et faire ce qui suit. Scénario Gedit disons, nous allons appeler texte, #! / user / bin / env PHP, comme nous l'avons vu la dernière fois. PHP. Maintenant, je vais faire exiger comprend config.php, même si cela peut induire une légère erreur. Et maintenant, je vais aller de l'avant et dire rangées, requête, sélectionnez étoiles des utilisateurs, et maintenant ici, je vais faire une technique la dernière fois pour chaque rangée de lignes que. Et je vais faire quelque chose de simple. Printf disons nom est ce, et est ce numéro, barre oblique inverse n. Et maintenant, je vais passer en ligne citer le nom unquote, et nombre rangée citation de fin de citation, et maintenant nous allons aller de l'avant et la fenêtre de ma borne chmod a + x ce faire ce script appelé texte exécutable. Et maintenant, nous allons distribuer le texte. OK, donc progresser. Donc, je l'ai un maintenant écrit script de ligne de commande, dans un langage appelé PHP, qui, à cause de cela nécessitera ligne, a accès à tous ceux configuration constantes que je spécifiée. Le nom de la base de données et ainsi de suite. En fait, juste pour être clair que ce ne sont pas un coup de chance, laissez-moi aller de l'avant et inscrire, très vite, quelqu'un d'autre comme Rob et je lui donnerai le numéro 555-1212. Et maintenant, si je lance le script nouveau, notez le pouvoir de ce que nous faisons avec la base de données. Maintenant, je l'ai immédiatement vu ce que la deux autres lignes sont dans ma base de données. Alors maintenant, nous allons essayer de faire quelque chose même amateur intérieur, et ceci est la partie que nous avons non testé à l'avance, de sorte que la dernière fois que je l'ai fait ce les choses se sont horriblement mal, nous avons la vidéo à cet effet. En fait, oui, drôle de côté. Ainsi, la dernière fois, dans un conférences comme il ya deux ans, nous avons décidé, je décidai, à être tout cela serait une bonne idée pour générer dynamiquement les emails au format classe, en utilisant l'ensemble CS50 de base de données étudiants, qui nous ont donné leur nombre et leurs porteurs de téléphones portables qui vous pourrait rappeler de pset0, comment raisonner, il se trouve Je ai eu un bug mineur dans mon programme et fait quelques erreurs en 2012, je crois. Lequel, celui que je devais boucle for fait exactement ce genre de chose, itération sur la base de données, l'obtention d'un nom à partir de la base de données, nom de la base de données, puis sur chaque itération de cette boucle je envoyé un e-mail. Mais au lieu d'envoyer un email, je envoyé un e-mail de la première itération, et deux e-mails une seconde itération, envoyés trois e-mails une seconde itération, qui que vous pouvez vous rappeler de notre discussion de notation asymptotique ce grand O de mauvais, comme n carré est le nombre de messages envoyés, mais il n'a pas été encore emails il était de messages texte. Et comme vous le savez, la fréquentation est pas super haute vers la fin du semestre et donc je pensais que ce serait mignon à le temps de dire: «Pourquoi n'êtes-vous pas classe?" Dans le texte message que je envoyé à toute la classe, et il était drôle à aimer 50% de la classe, mais l'autre 50%, certains d'entre eux flippé, je envoyé incroyablement notes sucrées apologétiques au personnel des excuses pour avoir manqué la conférence juste cette fois, non? Donc, ce serait horriblement mal. Donc, dans cet esprit, nous allons essayer cette à nouveau, mais juste avec mon numéro. À l'avance, dans functions.php, Je l'ai écrit cette fonction ici. Il a appelé texte, et il prend trois arguments. Un certain nombre, un support, et un message. Je suis en utilisant une instruction switch, qui merveilleusement PHP acceptent des chaînes, et pas seulement entiers, et je ne mettre en œuvre tout le soutien pour cette encore, Je viens de faire AT & T et Verizon. Comme il se révèle que ces transporteurs ils ont email à des passerelles SMS, où vous pouvez réellement envoyer un e-mail à une adresse comme le numéro de téléphone à vtext.com et si l'utilisateur n'a pas bloqué les messages, ça va passer par est un message de texte. Maintenant, pour ce faire, je vais avoir à ajouter un champ très vite à ma base de données. Je vais aller en ma structure, et je suis aller de l'avant et ajouter une champ à la fin de la table. Cliquons Go, et je suis vais appeler ce transporteur et pour l'instant je vais laisser cela comme un texte de la barre, mais nous pouvons être amateur dans l'avenir. Je vais aller vite dans ma table, et je suis me débarrasser de Rob, parce que ya un faux numéro, Je vais aller en modifier ici et je suis va changer ma porte manuellement être Verizon, dont il est, et maintenant ici. Faisons un rapide test de cohérence. Ouvrons notre script de texte, qui ressemble à ceci, le transporteur est% s. Nous faisons beaucoup plus erreur vérifier que je l'ai fait en 2012, le transporteur. Et maintenant, je vais aller avant et re-exécuter le script. D'accord. Carrier est Verizon, ce qui signifie maintenant, espérons que je peux faire juste cela. Correctement cette année, nous l'espérons, nous y voilà. Donc, à l'intérieur de cette boucle, je suis va avoir non seulement cette printf, Je vais aussi appeler texte et l'utilisation de cette fonction de rappel était il faut un nombre, une le transporteur, et un message. Voyons donc, le nombre va être rangée entre guillemets "nombre" rangée citation «transporteur», fin de citation et le dernier était un message. Ne pas gâcher cette année, point-virgule. D'accord. Croisons les doigts. Voyons voir si cela fonctionne. Très bien, alors. Et ce est parti. Disons déverrouiller le téléphone, croiser les doigts, que diable. May-- Undefined variable oh Attendez, attendez, attendez, très vite. Très vite, très vite. Ceci est vraiment la peine. Permettez-moi de saisir, permettez-moi de saisir, uh-oh. Merci, les textes ont commencé par quelqu'un d'autre. Permettez-moi aller de l'avant et ouvrir réel rapide, dropbox.php / mail ici. Veille. Vraiment la peine. Téléchargements. OK, la source src8m. D'accord. Besoin d'une ligne plus ici. Oh ça y est, il est dans Frosh GI, il est dans le registre à trois. Oh bonjour, Margo, je vous remercie beaucoup. OK, et je manquais cette ligne ici. Permettez-moi de saisir rapidement cette ligne de code, qui inclut l'e-mail ou une bibliothèque que je veux vraiment utiliser, Je vais rapidement revenir en fonctions, Je vais aller au sommet de cette déposer et exiger ce fichier ainsi, et maintenant je vais passer ma vraiment doigts quand je reviens à la commande script de ligne, qui est à l'intérieur de répertoire de l'hôte local d'aujourd'hui. Exécutez texte. Entrez. Mail. Veille. Veille. Mail. Oh, OK. Et ce est parti. Courrier obtient un nouveau courrier de PHP. Ai-je bien compris? Bon sang. To-- oh, attendez, attendez, attendez. Etre prêt. Je vous promets, cela est va être vraiment la peine. Adresse. Voilà pourquoi je ne fais pas de la exemples droite avant la classe. Ugh. Les destinataires suivants a échoué. Essayons une dernière chose. SMTP définir à partir de, ajouter adresse, l'adresse est en effet que. Essayons cette dernière partie de l'adresse. Oh, je suis vraiment triste en ce moment. Merci. Mais je l'apprécie vraiment tout les textes vous avons envoyé. Vous avez ce David. Vous souffler. Laissons là et nous fixerons le lundi. Rendez-vous donc. Daven FARNHAM: Et maintenant profonde Thoughts par Daven Farnham. Si un arbre binaire tombe dans la forêt et ne se situe autour de C it-- [gloussant].