[Powered by Google Translate] [Semaine 8, suite]
[David J. Malan] [Université de Harvard]
[C'est CS50.] [CS50.TV]
>> C'est CS50, c'est donc la fin de la semaine 8 ici.
Nous avons bien sûr eu un peu d'un ouragan plus tôt cette semaine,
alors maintenant il est vraiment juste toi et moi dans cette salle de conférence,
mais aujourd'hui, nous continuons notre conversation à propos de PHP
et à propos de la programmation web, plus généralement, et nous avons également introduire l'idée
des bases de données, en particulier celui qui est appelé MySQL, qui est très populaire ces jours-ci,
en grande partie en raison de son évolutivité et aussi parce que son être libre et open source.
>> Mais d'abord, regardons où nous nous étions arrêtés la dernière fois.
Rappelez-vous que nous regardions les exemples de plusieurs messages instantanés Frosh,
et ce fut la forme hideuse que je suis venu avec quelques 15 + ans
dans le but d'amener les élèves sur le campus registre pour les sports intra-muros de première année
sans avoir à trek plus dans la cour de Wigglesworth
de glisser un morceau de papier physique sous la porte quelques-uns de surveillant.
Au lieu de cela nous avons déménagé tout en ligne, mais pour cela nous avons besoin de faire usage
de quelques technologies, ainsi on, nous avions besoin de HTML, Hypertext Markup Language,
ce qui est nouveau cette langage de balisage avec lequel vous faites des pages Web structurellement.
>> En utilisant un peu de CSS ces jours-ci, les feuilles de style en cascade,
où nous utilisons stylisations de la page Web en utilisant une syntaxe légèrement différente,
tandis que le HTML a été tout au sujet de la structure de celle-ci.
Nous devons également mettre en place un langage de programmation web.
Dans ce cas, nous allons utiliser PHP et PHP va nous permettre
le contenu dynamique de sortie ainsi que faire des choses comme programmatiques
l'envoi de courriels, comme c'était le cas sur la note que nous a quitté la semaine dernière.
>> Rappelons que le code de cette était en 2 parties.
Un, nous avons eu froshims3.php,
et ce fut en grande partie le balisage d'un formulaire HTML à l'intérieur de celui-ci,
un petit peu de CSS ici dans les attributs de style
de sorte que la forme elle-même serait centrée sur la page, mais au-delà
nous avons eu quelques données du formulaire représentatifs, un champ de texte, une case à cocher,
certains boutons radio, un menu de sélection et un bouton submit.
Et via ce formulaire, nous avons soumis à un fichier qui a été apparemment appelé register3.php,
qui lui-même avait l'air un petit quelque chose comme ça.
Maintenant, la plupart du code dans register3.php, rappel, était tout au sujet de courriel.
Il fait un peu de la validation du formulaire qui a été lancée afin de s'assurer
que les champs ont été effectivement fournis qui étaient attendus.
Ensuite, nous avons appelé des fonctions PHP en utilisant la nouvelle syntaxe légèrement,
même si elle est empruntée à C.
>> Cet opérateur flèche qui nous permet de faire usage de ce qu'on appelle la programmation orientée objet.
Nous n'allons pas entrer dans les détails ici en détail, mais je sais pour l'instant
c'est une façon d'avoir des fonctions associées aux objets,
qui sont un type particulier de structure, comme nous l'avons vu dans C.
Mais pour l'instant, il suffit de prendre sur la foi que c'est la syntaxe correcte à utiliser
lorsque vous utilisez une bibliothèque comme cette bibliothèque PHPMailer.
Et puis à la fin de ce fichier que nous avions généré dynamiquement un e-mail
qui se sont adressé à mon compte jharvard@cs50.net
à partir de mon compte jharvard@cs50.net,
et nous avons informé l'utilisateur en conséquence qu'elles avaient été enregistrés pour ce sport.
C'est à peu près ce que le site Frosh IM fait pendant toutes ces années
quand je l'ai mis en place, d'accord, dans une langue différente,
mais il vous montre peut-être le pouvoir que vous avez
maintenant que vous pouvez vous exprimer non seulement par programmation
à un niveau faible dans un langage comme C, mais à un niveau beaucoup plus élevé
avec ces applications dans le monde réel comme très courriel à fait résoudre
certains problèmes du monde réel.
>> Maintenant, bien sûr, même si je utiliser ce script pour générer des
e-mails de façon dynamique à partir jharvard@cs50.net, qui est en fait un compte
que j'ai accès à, ne faire très attention à envoyer
seulement le courrier des comptes qui sont en fait le vôtre,
de peur que les choses que vous obtenez dans un peu d'eau chaude dans la vie.
Cela dit, nous allons maintenant la transition vers la résolution d'un problème tout à fait différent,
celle des États retenue.
Maintenant, qu'est-ce que cela signifie réellement?
HTTP, le protocole de transfert hypertexte,
est en fait un protocole sans état, et ce que cela signifie, c'est que
lorsque vous tirez quelque chose comme Google.com, puis appuyez sur Entrée
généralement votre navigateur a une sorte d'icône qui tourne alors
résultats dans une page web en cours de téléchargement,
et puis cette petite icône s'arrête de tourner, et cela suggère en effet
que HTTP a terminé une sorte de connexion au serveur et c'est tout.
HTTP est apatride, dans le sens qu'elle ne tient pas
une connexion persistante au serveur dans le même Skype ne
ou GChat fait car avec HTTP
l'hypothèse est qu'une fois que vous avez récupéré une page web c'est tout.
>> Maintenant, dans la réalité de nos jours sur des sites comme Facebook et Google Maps
et de Twitter et comme il ya beaucoup plus de dynamisme par lequel
même après que l'icône s'arrête de tourner, vous pouvez en fait obtenir plus de mises à jour
à partir du serveur, plus de tweets, mises à jour de statut sur Facebook et autres etc.
Mais même cela est en utilisant une technique que nous allons parler dans une semaine ou deux
connu sous le nom Ajax en utilisant un langage appelé JavaScript,
mais à la fin de la journée, HTTP est toujours sans état.
Et pourtant, si vous voulez quelque sorte se souvenir des choses au sujet d'un utilisateur
même après avoir déconnecté de votre serveur
PHP ne vous donner un moyen de le faire
parce que, comme nous l'avons vu la dernière fois, PHP dispose d'un certain nombre de superglobals,
et superglobale est, encore une fois, une variable globale spéciale
qui est remise par le serveur web et PHP par lui-même.
>> Vous n'avez pas à faire quelque chose pour mettre les valeurs en elle,
et parmi les super-globales que nous avons vu jusqu'à présent sont GET et POST,
qui est l'endroit où les champs du formulaire sont mises automatiquement pour vous,
ainsi que quelques autres que nous n'avons pas encore vu.
A l'intérieur de $ _SERVER sont des variables spéciales relatives au serveur lui-même.
Quelle est l'adresse IP, ce protocole HTTP ou HTTPS avez-vous utilisé,
quelle méthode avez-vous utilisé la demande et autres, donc il ya des choses intéressantes,
détails croustillants sur le serveur, et en fait, l'utilisateur il ainsi.
Il ya $ _COOKIE, qui est l'endroit où ces choses appelées cookies sont stockés.
Nous ne nous attarderons pas sur les cookies eux-mêmes aujourd'hui,
mais je sais pour l'instant qu'un cookie est juste un petit morceau d'information
qu'un serveur web peut planter sur un navigateur
et à son tour sa RAM ou le disque dur de son ordinateur
pour stocker des informations sur un utilisateur, par exemple, leur nom d'utilisateur
de sorte qu'ils n'ont pas à le saisir à chaque fois qu'ils se connectent ou une
numéro unique d'identification ou de l'utilisateur
de sorte que vous n'avez pas à les harceler avec les mêmes types de questions au sujet de
préférences à l'avenir, mais la plupart d'intérêt
en ce moment est de $ _SESSION.
>> Cette superglobale, qui, comme les autres, est remis automatiquement par PHP
lorsque vous écrivez des sites web PHP
peut stocker tout ce que vous voulez, les chaînes, les entiers,
flottants, des valeurs, des tableaux, des objets,
vraiment tout ce que vous voulez, et il vous permet de stocker de manière
que même si l'utilisateur vient vous rendre visite de temps en temps
revient une minute à partir de maintenant ou à 5 minutes à partir de maintenant parce que
ils prennent leur temps avant de cliquer sur un autre lien
PHP va assurer que ce que vous mettez dans ce que superglobale séance
quelques minutes ou 5 minutes il ya seront toujours là lorsque l'utilisateur revient.
Et sous le capot de cette superglobale est mis en œuvre par le biais de
ces choses appelées cookies, mais pour l'instant, c'est juste une abstraction
où c'est un peu l'équivalent programmatique d'un panier d'achat.
Quoi que vous, le programmeur, mis dans cette
superglobale tableau associatif sera là un certain nombre de minutes plus tard,
jusqu'à ce que vous le supprimiez ou jusqu'à ce que l'utilisateur quitte son navigateur totalement.
>> Jetons un coup d'oeil à un exemple de la façon dont cette chose est réellement utilisée.
En counter.php entre morceaux d'aujourd'hui de code
nous avons la ligne suivante.
Au début de ce dossier, nous avons un tas de commentaires bleus, qui sont sans intérêt pour le moment.
Mais à la ligne 13, nous avons une nouvelle ligne,
session_start, et qui ne fait exactement ce qu'il dit.
Il commence sessions.
Il vous permet d'utiliser ce gros superglobale $ _SESSION, et c'est aussi simple que cela.
Maintenant, si nous procédons à regarder à la ligne 16, nous allons essayer de comprendre ce que cette page web va faire.
If (isset ($ _SESSION ["compteur"]), puis aller de l'avant
et stocker dans la variable compteur, compteur minuscules,
$ _SESSION ["Compteur"].
Cela semble être la déclaration d'une variable locale appelée contre-
à l'intérieur de laquelle elle est mise une copie de tout ce qui est à l'intérieur de la super-
appelé session à l'emplacement «contre».
Sinon, apparemment, ce petit compteur de variable locale, est initialisée à 0.
>> Mais alors, quelques lignes plus loin dans 26 préavis que la copie de la session de compteur,
la clé, a une valeur assignée nouvelle qui est la valeur actuelle de plus 1.
En bref, ce fichier semble être la mise à jour
un compteur qui est stocké à l'intérieur de la super session de
en l'incrémentant de 1, mais il conserve une première copie de la valeur précédente
en le stockant dans une variable locale appelée $ compteur,
et puis ici nous allons voir ce qu'il en reste.
Il s'avère que c'est à peu près juste HTML.
Au bas de cette page, nous voyons dans la ligne 37 que j'ai visité ce site
numéro du compteur de temps, donc il ya un couple d'fonctionnalités intéressantes ici.
Un, il s'agit clairement d'une variable, mais il ne suffit pas de simplement mettre
$ Compteur dans le corps de votre code HTML, car bien sûr,
si c'est juste là, au milieu de votre PHP HTML va supposer que c'est juste HTML.
Vous voulez littéralement $ compteur à imprimer sur l'écran.
>> Mais au lieu de tomber dans le mode PHP
avec ce morceau de syntaxe, nous pouvons insérer dynamiquement une valeur ici
très semblable dans l'esprit à ce que nous avons fait la dernière fois avec
l'insertion de valeurs dans des chaînes.
En fait, c'est juste une notation abrégée pour dire quelque chose comme cela à la lettre,
print ($ compteur) ou même quelque chose comme printf (% s, comptoir)
ou même, comme vous avez pu le voir en ligne ou dans les manuels,
il ya une fonction en PHP appelé écho
qui fait la même chose, et tous ceux qui sont simplement des façons plus prolixes
de dire <? =.
Dans ce cas, on vous n'avez pas besoin de mettre
PHP mot après le point d'interrogation.
C'est notation abrégée pour, encore une fois, ce que nous venons de le voir il ya un instant
qui se fait l'écho de la valeur.
>> Voyons voir ce que le résultat final de ceci est réellement.
Permettez-moi de passer en revue dans notre fichier counter.php,
et nous allons voir ce que David fait une erreur en jouant avec le code là-bas.
Allons-y tout ce qu'il fixe vissé vers le haut,
et l'erreur semble être là, disparu, à la ligne 37.
Selon le haut de cette page, j'ai visité ce site 0 fois.
Eh bien, allons-y maintenant, et dans la partie supérieure du navigateur cliquez sur le
recharger icône, et je clique sur recharger,
et maintenant, j'ai visité le site 1 fois, 2, 3, 4, 5, 6, 7, 8.
Et en effet, si l'on regarde à la source de cette page le code source est en mutation,
et noter l'absence totale de toute PHP, et c'est parce que
Code PHP est évaluée ou interprété côté serveur,
et si cela signifie que la sortie du script PHP, c'est ce qui en fin de compte envoyé au navigateur,
qui dans ce cas est certaine HTML brut et du texte brut.
Qu'est-ce qui se passe ici?
>> Eh bien, avec relativement peu de lignes de code je suis capable de stocker
constamment au cours de plusieurs secondes, ou si nous avons attendu assez longtemps,
minutes, voire quelques heures, une certaine valeur dans une manière qui rend HTTP
semblent stateful comme si nous avons conservé
cette connexion au serveur, et il est juste de rappeler ce que j'ai dit la dernière fois,
mais en réalité, il ya tout un tas de complexité se passe sous le capot
impliquant les cookies qui est PHP permettant de me donner cette illusion
de ce panier-comme fonction.
Pour l'instant, un exemple trivial où nous sommes juste stocker un nombre entier,
mais cette fonction ne reviendra être d'une grande valeur
quand on commence à parler des projets plus complexes,
parmi eux problème posé 7.
C'est votre problème tout dernier mis en CS50.
Je sais, c'est tellement triste, mais ce que vous trouverez, c'est que nous allons conclure
cette partie de la session par le fait la transition
du contexte de C certainement le contexte de PHP
mais en utilisant certains des principes fondamentaux mêmes
Nous avons parlé pendant un certain temps.
>> L'objectif de pset 7 est de mettre en œuvre CS50 Finances,
qui est votre propre version de Yahoo Finance ou Google Finance
ou même Etrade.com lequel vous avez la possibilité de
consulter les cours des actions des symboles donnés, mais encore plus que cela
vous avez la possibilité d '«acheter» et «vendre» les stocks
qui sont négociés sur les places boursières différentes parce que cette page d'accueil
suggère ici, ce qui est vraiment dans la mesure où nous avons commencé
l'ensemble problème pour vous, vous avez un formulaire de connexion qui est demandant un nom d'utilisateur et un mot de passe.
Il a un bouton submit, mais par la suite, comme nous allons le voir finalement,
il n'y a rien qui se passe vraiment sous le capot encore parce qu'il
vous reste plus qu'à mettre en œuvre la possibilité d'enregistrer de nouveaux utilisateurs,
la capacité d'acheter des actions, de vendre des actions,
effectivement regarder les cours actuels.
>> Et en effet, ce sera aussi le monde réel que possible parce que nous avons fait
inclure un morceau de code qui vous permettra avec une seule fonction
d'interroger Yahoo Finance, ce qui rend merveilleusement disponibles les données gratuites
pour rechercher des prix des actions fondées sur le symbole ou symbole,
et vous remettre le prix actuel du stock de la journée.
Les données que vous êtes en train de voir dans ce pset particulière sera
à peu près aussi réel comme il peut faire de sorte que vous êtes en train de l'interface
avec des stocks mondiaux, les prix réels du monde réel,
et nous verrons combien d'argent vous pouvez faire peut-être
au cours des prochains jours, de jouer avec votre propre problème ensemble.
>> Mais nous allons d'abord préparer le terrain pour la façon de concevoir quelque chose qui est certainement plus compliqué
que counter.php, c'est plus compliqué que l'un des exemples instantanés Frosh à ce jour,
et nous allons essayer d'introduire quelques paradigmes ici qui nous permettent
à la fois pour pset 7 et peut-être pour votre projet final si vous faites quelque chose basé web
de garder votre code bien organisé, pour vous tenir sain d'esprit,
et de faire un pas vers la collaboration, que ce soit dans le projet final CS50
ou au-delà si vous continuez à programmer quelque chose dans l'avenir.
Il ya ce paradigme de conception générale
en informatique et en développement de logiciels plus généralement
connu sous le nom MVC, Model View Controller,
et ceci est un acronyme qui décrit ridicule une très bonne idée,
qui est la séparation des différents aspects d'un programme,
spécifiquement en gardant séparée de la logique ou de la logique métier d'un site web
de sorte que tout ce qui implique des choses comme
appel de fonctions et d'interrogation des bases de données et autres
se passe pas chez votre code HTML
mais plutôt dans des fichiers séparés, et en effet, il ya ce fichier une
généralement que vous avez appelé le contrôleur
c'est vraiment le cerveau derrière l'opération, et nous allons voir un exemple
cela dans un instant.
>> Il s'agit d'un modèle qui est le code de programmation
qui fait le parler à vos bases de données, qui parle à Yahoo Finance et autres,
et puis il ya le V dans MVC, les points de vue,
toutes les choses qui se rapporte à l'esthétique, les fichiers qui contiennent le
votre code HTML, CSS et peut-être votre etc.
L'idée ici, comme ce tableau indique, est que le contrôleur
est le fichier, comme nous le verrons bientôt, et comme vous pourrez le voir dans pset notamment 7,
que le monde parle par l'intermédiaire de leur navigateur Web.
C'est le fichier qui reçoit la visite sur l'Internet public,
mais le contrôleur parle potentiellement un modèle,
qui est une ou plusieurs autres fichiers contenant le code lié à des données,
code lié aux bases de données et autres, et puis il parle à
le dispositif de commande une ou plusieurs autres fichiers connues sous le nom de vues,
qui sont l'esthétique d'une page Web, des modèles de toutes sortes,
qui pourrait prendre certaines données en entrée, mais à la fin de la journée
la seule logique à l'intérieur d'une vue doit être le rendu de ces données,
itération sur une boucle et fait cracher une certaine
HTML interprétation de celle-ci ou même quelque chose comme un fichier PDF.
>> Ce qui est bien à propos de MVC est que vous pouvez avoir des opinions différentes
sur la base du type de dispositif, en fonction du type de format de fichier effectivement
voulons montrer à l'utilisateur.
Jetons un coup d'oeil à quelques exemples de plus en plus complexes et bien conçu
en commençant d'abord avec la version 0 ici.
Permettez-moi aller de l'avant et d'ouvrir dans notre annuaire MVC aujourd'hui
un fichier nommé index.php dans le répertoire 0.
Remarquez que c'est un site super simple et très décevante
c'est une sorte de version 0 d'une page d'accueil pour CS50,
et remarquez comment nous avons un lien vers Lectures, nous avons un lien vers Syllabus,
et si je suis le lien vers Lectures préavis que l'URL
là-haut va changer à lectures.php.
Si je puis suivez le lien vers semaine 1 avis indiquant que l'URL change à week1.php.
Il semble y avoir une structure hiérarchique assez simple ici.
>> Jetons un coup d'oeil sous le capot sur la façon dont cela est présenté,
et en effet, si je regarde index.php c'est assez simple.
En fait, même si j'ai appelé ce fichier en PHP il n'y a aucun code de programmation.
Il s'agit d'un commentaire que j'ai écrit en PHP ici juste afin que l'utilisateur ne se retrouve pas le voir.
Bien sûr, comme avant, tout ce qui est entre les balises PHP
est interprété, même si c'est un commentaire, et d'interpréter un commentaire
signifie simplement le jeter à la fin de la journée et pas vraiment
l'envoyer au navigateur, donc tout ici est seulement esthétique.
Si j'ouvre même lectures.php c'est trop juste un fichier codé en dur.
Il arrive à être appelé quelque chose. Php,
mais il est vraiment juste. html, et week1.php, week2.php
sont tout de même balisage, donc il ya un tas de défauts de cette conception.
Premièrement, c'est une énorme quantité de copier / coller.
Même si la seule chose qui change entre ces fichiers est la liste non-ordonnée,
les balises li, j'ai tout de même avoir le type doc, HTML, tête,
titre, le corps fin, gros HTML et plus
dans chaque fichier unique, ce qui signifie que si je veux de restructurer
cette page web ou restylize je dois y aller et de modifier
tous ces fichiers manuellement ou avec un peu massif rechercher et remplacer.
>> Prenons un pas de plus vers une conception plus intelligente, plus penser en version 1 ici
grâce à quoi, par la me lire ce que nous avons inclus de sorte que vous pouvez jouer avec
celles-ci plus tranquille à la maison préavis que nous avons ici
un résumé des fichiers dans la version 1 de ce site,
et il me semble que je l'ai pris sur moi de factoriser
un code commun, header.php et footer.php.
Eh bien, nous allons jeter un coup d'oeil à ce qu'il ya dans le premier d'entre eux.
Header.php semble familier,
mais remarquez où ça me coupe la parole?
Juste après la ligne 19, de sorte que c'est tout ce qui était commun
de l'index.php fichiers, lectures.php,
semaine1 et week2.php de l'exemple précédent.
Ce que j'ai fait était exemplaire et tout coupe qui était commun à tous ces fichiers,
le mettre dans un fichier d'en-tête distincte, et de même dans footer.php
ai-je appliquer le même principe par lequel les seules lignes intéressantes
dans footer.php sont ces deux, le corps étroit et HTML proche.
>> Mais ce que cela signifie, c'est que maintenant dans la nouvelle version
de l'avis index.php comment beaucoup plus simple qu'il peut obtenir.
Certes, un peu plus cryptique regarder, un peu moins intuitif
à suivre de haut en bas, mais mon Dieu, tout cela redondance est désormais révolue.
Nous avons besoin de l'aide d'une fonction PHP littéralement appelé nécessiter jusqu'à haut,
qui n'est pas sans rappeler, rappeler, de C # include du mécanisme.
Nous avons besoin de header.php au sommet.
Nous avons besoin de footer.php à la base, et la seule chose qui est différente
ou de particulier dans ce dossier est le contenu qui est censé être unique à elle.
Si je puis aller dans, disons, lectures.php, le même principe s'applique.
Encore une fois, quelques commentaires là-haut, mais j'ai besoin d'en-tête, pied de page requièrent,
et entre les deux, c'est uniquement le contenu qui a réellement changé.
Et si nous avons regardé dans la semaine 1 et semaine 2 nous verrions
que le même principe a été appliqué là-bas.
Eh bien, nous ne sommes pas tout à fait terminé là.
>> Jetons un coup d'oeil à la version 2, qui a une structure similaire,
mais remarquez maintenant, j'ai introduit quelque chose d'autre.
Dans la ligne 10, j'ai introduit helpers.php,
qui contient apparemment des fonctions auxiliaires.
Une fonction d'aide est généralement une fonction relativement courte
que vous écrivez pour vous aider dans divers endroits,
et nous allons voir ce qu'il ya dedans des helpers.php.
Dans ce cas, on dirait qu'il a 2 fonctions.
Rappel de l'autre jour avec notre exemple cube
vous pouvez définir vos propres fonctions en PHP, et ce que j'ai fait aujourd'hui, c'est que je n'ai
fonctions définies appelées rendre pied de page et en-tête rendre,
dont le premier a un paramètre appelé données,
dont la valeur par défaut est un tableau vide, comme l'a suggéré il ya,
et nous pouvons écrire ce encore plus succincte dans la dernière version de PHP
en disant ouverte crochet, crochet fermé.
Cela signifie un tableau vide de taille 0, mais néanmoins un tableau.
>> Cette fonction extrait est un peu spéciale en ce
ce qu'il fait est qu'il prend comme argument un tableau associatif
qui a 0 ou plusieurs paires clé-valeur, et si vous avez une clé de foo
et une valeur de la fonction de la barre d'extrait
crée une situation qui maintenant, comme la ligne 11,
vous avez une variable locale appelée $ foo dont la valeur est bar.
Et si vous aviez plus de clés et de valeurs dans le tableau de données,
même auraient-ils être extraits dans la portée locale
espace de nom ou de telle sorte que footer.php et
la même idée ici-bas afin que header.php
avoir accès à ces variables.
En fait, permettez-moi d'ouvrir à nouveau header.php
et attirer l'attention maintenant à quoi il ressemble dans cette version.
>> Plutôt que de coder en dur CS50 que le titre de chaque page
constater le dynamisme qui est possible aujourd'hui.
À la ligne 5 Je suis l'écho d'une variable title,
mais d'abord je suis de passage cette variable titre à une fonction appelée htmlspecialchars.
Un nom stupide pour une fonction, tant qu'il est, mais il fait vraiment ce qu'il dit.
Il veille à ce que tous les caractères spéciaux
dans la chaîne qui a été adoptée en HTML d'échappement sont bien.
C'est en fait un moyen d'éviter ce qu'on appelle un cross site scripting attaque
par lequel quelqu'un peut malveillante ou accidentelle
injecter leur propre code HTML dans votre site web
en collant dans une certaine forme, par exemple,
quelque chose que vous n'avez pas été assez attendent, notamment le code JavaScript,
comme nous allons parler dans une semaine ou deux de temps.
>> Cette header.php maintenant, c'est une vue
dans le sens où il permet de visualiser le contenu du esthétiquement un ensemble de données.
Mais plus spécifiquement, il s'agit d'un modèle.
C'est en quelque sorte un plan maintenant de ce que nous voulons l'en-tête de chaque page pour ressembler,
mais il ya un certain dynamisme dans ce que nous voulons que le titre soit inséré dynamiquement
sur la base de la variable titre
qui a été extrait lorsque nous avons appelé, encore une fois,
la fonction de rendu d'en-tête.
Maintenant, si on regarde de bas de page de rendu, il ya en fait pas très utile de ce droit maintenant
parce que dans footer.php il n'y a pas de dynamisme que ce soit.
Il pourrait y avoir, mais pour le moment c'est une liste codée en dur de 2 balises,
mais l'idée est de même, de sorte que suggère en fait pourquoi
avons-nous perdre du temps avec un en-tête de rendu et d'une fonction de conversion de bas de page?
Laissez-moi aller à la place maintenant dans la version 3,
et dans la version 3 dans les assistances, j'ai décidé de le simplifier encore plus.
>> Laissez-moi avoir une fonction de rendu.
Permettez-moi de faire prendre un autre argument, cette fois appelée modèle,
qui est destiné à être le nom d'un modèle,
et puis je vais concaténer orgueil. php à la valeur de cette variable,
et puis si elle existe, foo.php bar.php ou header.php et footer.php,
alors je vais aller de l'avant et d'extraire les données variables
puis exiger cette voie.
En d'autres termes, à utiliser maintenant, si j'ouvre index.php
remarquerez que je n'appelle pas d'en-tête rendu plus.
Je viens d'appeler rendre, mais je passe à une valeur cité d'en-tête
de préciser quel modèle je veux vraiment à charger.
>> Puis ici remarquer ce que je fais.
Je suis de passage en dynamique une clé de titre,
une valeur de CS50, et cela aussi, comme nous l'avons vu précédemment,
pourrait être plus succincte dans la dernière version de PHP
où je peux remplacer la fonction de tableau avec des crochets,
que je propose est encore plus lisible et certainement
un peu plus facile à taper.
Et bien sûr, avec l'appel de rendu bas de page vers le bas,
nous ne vous embêtez pas passer dans un second argument du tout, pas de tableau associatif,
parce qu'il n'y a rien à l'intérieur de cette dynamique de bas de page.
C'est juste quelques balises de fermeture pour le HTML.
Bon, nous prenons des mesures pour donner réellement nettoyer les choses ici,
mais laissez-moi ouvrir 2 exemples finales.
Celui-ci, numéro 4, vous remarquerez que j'ai pris la décision consciente maintenant
à améliorer l'exemple précédent en utilisant une hiérarchie enfin à mes fichiers.
>> Notez que dans ce résumé, en ce qui me lisez, j'ai introduit
un répertoire comprend et un répertoire templates
dont le contenu va y avoir des choses que je veux comprendre
et les modèles que je veux rendre, respectivement.
C'est vraiment moi étant anale et essayer de garder les choses en ordre,
conserver les fichiers liés ensemble, mais le résultat final
est que nous avons maintenant une configuration légèrement plus net, mais nous devons nous rappeler maintenant
dans, par exemple, index.php
lorsque nous avons besoin du fichier helpers.php
nous devons maintenant besoin via includes / helpers.php
plutôt que de simplement dire helpers.php parce que maintenant il est en fait dans un sous-répertoire.
Maintenant, en passant, que vous verrez dans ces exemples et quelques autres
des fonctions telles que l'exigent, requièrent une fois.
Il s'agit en fait d'une fonction lui-même appelé comprendre, et ils ont tous un comportement légèrement différent.
Ici, je dis une fois besoin de faire super clair que je ne veux que ceux
aides inclus dans mon projet une fois.
Mais si je fais attention et si je suis en train de réfléchir à ma logique proprement
il suffira de dire trop juste besoin là-haut
tant que je n'ai moi-même pas accidentellement besoin de ce même fichier ailleurs.
En fait, c'est une manière un peu plus efficace de faire les choses, puis en utilisant
requièrent une fois, donc je vais la réduire à un peu besoin.
>> Prenons un peu plus loin.
Ce dernier exemple présent, la version 5, a une hiérarchie de dossiers encore plus propre.
Remarquez ce que j'ai fait ici par la me lire dans cette version finale
est maintenant j'ai mon répertoire HTML, que j'ai eu tout ce temps,
mais à l'intérieur d'il ya maintenant seulement index.php, lectures.php,
week1.php et week2.php.
Le répertoire comprend vit désormais aux côtés du répertoire HTML,
donc au même niveau en tant que frères et sœurs, pour ainsi dire.
Il en va du dossier Modèles.
Les plats à emporter clé ici est que j'ai présenté la structure un peu plus,
mais la principale caractéristique est désormais que seuls les fichiers
qui ont besoin d'être accessible sur le Web, publiquement adressables
par une URL sur l'Internet public sont dans mon répertoire HTML.
>> Fichiers Pendant ce temps, d'autres, helpers.php, footer.php,
header.php, qui sont sans doute peut-être plus sensible,
peut-être des aides a effectivement quelques noms d'utilisateur et mots de passe ou quelque intellectuelle
propriété de la mienne, je fonctionne vraiment pas envie de voir le monde, même si accidentellement.
C'est une bonne habitude à garder hors du répertoire public HTML
tous les fichiers qui ne sont pas eux-mêmes doivent être publiques.
Tout ce que vous avez à faire dans ce cas quand on regarde, par exemple,
fichier index.php dans le répertoire HTML,
remarquerez que nous suffit d'être un peu plus prudent en exigeant
ou exiger une fois ce fichier.
Je dois d'abord faire .. pour aller vers le répertoire parent,
alors ne / includes / helpers.php
de se replonger dans pour obtenir le fichier dont je me soucie.
>> Toutes les questions, puis sur MVC
ou cette incarnation relativement simple de celle-ci?
Et permettez-moi de préciser que nous nous sommes concentrés un peu sur le
V ici, la vue et l'affacturage hors de ces modèles.
Nous n'avons pas vraiment distingué M de C pour l'instant.
En fait, il n'ya vraiment pas de M ici, et même notre C,
contrôleur, ne fait pas vraiment tant que ça, mais vous aurez beaucoup plus
connaître à la fois de ces 2 lettres de MVC,
ou plutôt, vous aurez beaucoup plus familier avec le C
dans MVC pour 7 problème posé, il n'y a donc plus de cela à l'horizon.
Des questions?
Il s'agit en fait n'y a personne ici.
>> Ok, nous allons maintenant passer à la deuxième et dernière question pour aujourd'hui.
C'est l'introduction d'une base de données.
Jusqu'à ce point, nous avons eu quelques moyens de stockage de données.
Nous avons utilisé des variables.
Retour dans notre fichier C, I / O discussions que nous avons commencé à utiliser des fichiers texte
et l'utilisation de fichiers comme fprintf, puis nous avons même commencé
parle CSV dépose un peu, valeurs séparées par des virgules,
de sorte que tous ces nous a permis d'avoir des données stockées
soit non persistante ou persistante.
Mais même CSV ne sont pas vraiment propice à la recherche
et l'insertion et la suppression.
C'est vraiment juste un fichier texte stupide séparés par des virgules
rangée par rangée par rangée par rangée, donc si vous voulez
rechercher ce fichier le mieux que vous pouvez faire, c'est vraiment la recherche linéaire.
Vous devez commencer par le haut du fichier, lire le tout dans,
et de chercher une valeur d'intérêt.
Si vous voulez y insérer que vous devez faire la même chose,
itérer sur elle et l'insertion dans un endroit particulier,
et en fait, vous avez à faire toute la logique de la recherche vous-même.
>> Vous ne pouvez pas intelligent modèle correspondant sur un fichier CSV à moins que vous écrivez vous-même le code.
Vous ne pouvez pas faire de filtration d'un fichier CSV
à moins que vous écrivez vous-même le code.
Ce ne serait pas bien si quelqu'un d'autre a mis tout de l'effort
de faire réellement la recherche facile et une insertion facile
et la suppression et mise à jour et ainsi de suite?
C'est exactement ce qu'est une base de données est.
SQL, langage structuré de requêtes, est encore une autre langue
que nous vous présentons aujourd'hui, mais c'est trop assez accessible,
et ce que nous allons vraiment faire est de simplement arracher de lui quelques-uns des plus saillant
Caractéristiques de sorte que pour pset 7, et si vous faites quelque chose basé web,
votre projet final, vous avez la possibilité de vous exprimer
en termes de requêtes de données.
Vous avez la possibilité de stocker un peu ou beaucoup de données
d'une manière beaucoup plus structurée qui sera à la fin de la journée
vous rendre la vie plus facile, car avec SQL, vous pouvez vous exprimer
beaucoup plus de précision, beaucoup plus méthodiquement afin d'
récupérer un sous-ensemble de données à partir d'un corpus de données plus large.
>> Vous pouvez penser à une base de données, dans ce cas, une base de données SQL, vraiment comme Excel
ou Numbers où il est une feuille de calcul,
ou peut-être plusieurs feuilles de calcul, un tableur et, bien sûr,
présente des rangées et des colonnes, et c'est parce que
Bases de données SQL sont relationnelles, relationnelles dans le sens
qu'ils stockent les données en fonction de ces tableaux,
des lignes et des colonnes.
Ils sont plus performant que quelque chose comme une feuille de calcul,
et une feuille de calcul est destiné à être utilisé par un être humain.
Une base de données est destiné à être utilisé par un programmeur
contre l'écriture de code, donc l'incarnation d'une base de données
va être soit en ligne de commande.
>> Une des bases de données relationnelles les plus populaires là-bas est, encore une fois, MySQL,
qui est merveilleusement libre, performant très élevés, et c'est ce que
Facebook utilisé très tôt et dans une certaine mesure encore aujourd'hui
pour stocker un grand nombre de ses données, et nous le verrons dans un instant
que l'utilisation des commandes relativement simples
nous pouvons sélectionner des données, les données d'insertion, de mise à jour des données,
supprimer les données et autres, mais heureusement, il ya plus d'une interface conviviale
que juste en tapant à l'invite noir et blanc ici.
Nous allons utiliser pour pset 7 et au-delà d'un outil gratuit appelé phpMyAdmin.
Le nom est une coïncidence.
L'outil qui arrive à être mis en œuvre en PHP,
mais c'est fondamentalement hors de propos.
Ce qui est utile à propos de phpMyAdmin, c'est qu'il est un utilitaire basé sur le Web.
Nous l'avons pré-installée dans l'appareil pour vous,
et avec lui, vous pouvez créer des tables dans une base de données,
vous pouvez insérer des données, supprimer des données, et généralement voir
vos données dans un assez convivial environnement.
Vos utilisateurs ne vont pas utiliser phpMyAdmin.
>> C'est vraiment juste un outil administratif ou développeur
qui à voir et à fouiller vos données et comprendre comment le structurer,
un peu comme vous vous pouvez utiliser Excel ou Numbers,
mais ça va être un excellent moyen de visualiser ce qui se passe sous le capot
afin que vous puissiez vous concentrer sur la résolution de problème intéressant et pas tellement
sur les commandes ésotériques.
Jetons un coup d'oeil à un exemple de données qui peuvent être stockées tabularly
dans une base de données relationnelle.
Voici un exemple.
Maintenant, malheureusement, phpMyAdmin a commis une erreur sur le côté de façon jeter trop de mots
et des graphiques à vous, mais si vous parfaire dans tout le
Colonne ID, la colonne de nom d'utilisateur, et la colonne de hachage,
c'est effectivement une feuille de calcul, mais il arrive à être un extrait
d'une table à l'intérieur de l'appareil
à l'aide d'un fichier que nous vous fournir en 7 set problème.
>> En particulier, nous vous donnons un fichier qui représente
d'un utilisateur table, donc une feuille de calcul contenant les utilisateurs avec 3 colonnes,
dont l'un est un identifiant unique à partir de 1 et est incrémenté par la suite.
La deuxième colonne est un nom d'utilisateur, et ceux d'entre vous qui ont fait Hacker,
l'édition Hacker pour pset 2, peut reconnaître certains de ces noms d'utilisateurs au moins.
Sur le côté droit sont des mots de passe, mais ils ne sont pas les mots de passe littérales.
Ils sont hachages de celle-ci, il s'avère
que le stockage de mots de passe dans une base de données est une très mauvaise idée.
Vous avez tous probablement lu à un moment donné de certains site web
base de données ou une entreprise d'être compromise, et il vous faudra alors
changer votre mot de passe, vous devez obtenir des remboursements sur les choses
parce que certains mauvais gars fait irruption dans votre compte en conséquence.
>> Stocker les mots de passe en texte clair, non crypté dans une base de données
est tout à fait stupide, et pourtant c'est très amusant
puis de lire à propos de certaines entreprises très connues
parfois dans la presse dont les bases de données sont compromises,
et cette partie n'est pas drôle, mais le fait que les bases de données contiennent clair
mots de passe est ridicule parce que littéralement avec une ligne de code
vous pouvez protéger contre cette menace particulière, et c'est ce que nous avons fait ici.
Même pour notre petite faux CS50 Version finances
nous sommes le cryptage des mots de passe pour faire bonne mesure, et le fait que
tous ces mots de passe commencer par $ 1 $ n'est qu'une convention.
Cela signifie simplement qu'ils sont cryptées ou vraiment haché,
qui est comme une fonction de cryptage à sens unique
laquelle vous ne pouvez pas inverser ses effets avec quelque chose appelé MD5.
>> Le fait que 50 est après cela signifie que la valeur de salage
de 50 a été utilisé pour hacher tous ces mots de passe, sauf un.
Mine, bien sûr, comme vous pouvez le constater, HA,
a l'aide d'un sel différent, donc ceux d'entre vous qui se sont un peu croche-pied
peut-être dans Hacker 2, qui aurait pu être le résultat de notre avoir utilisé
un hachage différent des autres parce que mon mot de passe est en fait le même
comme un autre utilisateur là-haut.
En fait, si vous avez attendu toutes ces semaines pour savoir
ce que ces mots de passe sont ici ont été les mots de passe qui vous ont été contestées
à sévir dans l'édition du 2 Hacker problème posé, si pas trop difficile.
En fait, malan était le même que jharvard,
mais si nous revenons ils avaient l'air différent.
>> Concentrez-vous sur jharvard de pourpre parce qu'ils ont été salées différemment.
L'algorithme a été perturbé de façon que la
valeur de hachage, la valeur chiffrée est un peu différent
parce que les entrées étaient un peu différent, mais le mot de passe sous le capot
était toujours en fin de compte cramoisi.
Maintenant, qui se soucie de cela?
Eh bien, nous mettons à votre disposition des exemples d'utilisateurs, les noms d'utilisateurs échantillons
et les hachages de leurs mots de passe afin que vous avez réellement une certaine
clients pour CS50 Finances quand vous obtenez d'abord sur le sol avec votre code.
Vous aurez à mettre en œuvre plus de tables à l'intérieur de MySQL, à l'intérieur de la base de données.
Vous aurez à créer plus de tableur, de manière efficace, mais nous avons décidé de vous donner celui-ci
pour vous aider à démarrer, et vous verrez que la spécification du jeu de problème
vous guide à travers le processus d'importation de cette table
et aussi expliquer ce que quelques-unes des caractéristiques,
et vous verrez aussi que nous vous fournissons le code
à traiter le hachage ou le cryptage de ces mots de passe,
vous n'avez donc pas besoin de trop se soucier de ce que MD5 ou analogue est en fait tout à propos.
>> Donc, SQL, langage structuré de requêtes.
C'est, tout simplement, la langue que nous sommes sur le point de commencer à utiliser dans pset 7
et peut-être au-delà de demander des données à partir de certaines bases de données.
Les données sont, encore une fois, stockés tabularly dans ces tables relationnelles, des colonnes et des lignes,
mais en utilisant une syntaxe relativement simple comme supprimer,
insérer, mettre à jour et sélectionnez pouvons-nous faire exactement cela.
Nous pouvons supprimer de la base de données, insérer,
jour des données, ainsi que certains, qui, extraient des données de la base de données.
Comment allons-nous faire cela?
Permettez-moi aller de l'avant dans l'appareil.
Permettez-moi de tirer vers le haut http://localhost,
qui, là encore, est l'appareil local lui-même.
C'est son surnom par défaut.
Et laissez-moi aller / phpmyadmin.
Cela arrive à être une URL spéciale que l'appareil est préconfiguré pour comprendre
qui invite m'a tout de suite un nom d'utilisateur et mot de passe.
>> Comme d'habitude, je vais taper jharvard et cramoisi,
mais se rendre compte que c'est le compte administrateur sur l'ordinateur.
C'est juste une coïncidence qu'il ya aussi un jharvard enregistré pour CS50 Finances.
Jharvard, pourpre, entrez me donne de l'interface utilisateur que nous avons vu
un aperçu de tout à l'heure, et c'est un peu écrasante au premier abord,
mais rassurez-vous, vous n'allez jamais avoir à cliquer sur la plupart des liens dans cet outil.
Vous vous retrouverez à l'aide d'un petit sous-ensemble qui sont super utiles,
la première de bases de données qui est ici.
Si je monte aux bases de données, vous remarquerez que je suis invité à créer une base de données.
C'est comme la création d'un nouveau fichier Excel, de manière efficace.
Je vais aller de l'avant et d'appeler cette conférence, et je vais tout simplement ignorer le champ là-bas, collation.
Il a à voir avec la représentation des données qui y figurent,
et je vais cliquer sur créer, et remarquez maintenant que je laisse aller créer
sur le côté gauche où il est dit pas de bases de données
Je devrais bientôt voir la base de données de conférence.
>> Si je clique maintenant sur le côté gauche, la base de données de conférences,
remarque que mes onglets changent un peu.
J'ai structure, SQL, l'exportation, l'importation et d'autres choses.
La structure est à peu près vide.
Pas de tables dans la base de données, comme il est dit ici,
nous allons donc créer une table, et nous allons aller de l'avant et créer une table
comme les étudiants, et le nombre de colonnes voulons-nous?
Dossier Gardons cette simple, et soit pour chaque élève
un numéro d'identification, un nom et une adresse e-mail.
>> Nous allons garder les choses simples comme ça, donc 3 colonnes, allez.
Le formulaire que vous voyez ici est un peu désordonné et écrasante,
mais il suffit de passer par là, rangée par rangée, donc très rapidement, nous allons donner
la première colonne dans la base de données un ID pour le nom de l'identifiant unique.
Ce sera un entier. Je peux effectivement ignorer longueur et valeurs.
Un int va être 32 bits, peu importe ce que vous tapez là-dedans, nous allons donc laisser le champ vide.
La valeur par défaut, je pourrais le faire nulle, tel que défini.
Je vais laisser cela seul. Ne soyons pas s'inquiéter des valeurs par défaut.
Faisons défiler ici à droite, attributs.
Ce qui est intéressant.
Allons de l'avant et un peu arbitrairement que les ID doit être signé.
Ne perdons pas les nombres négatifs.
>> Allons 0 à 4 milliards, donner ou prendre,
et puis il ne faut pas toucher à aucun de ces champs pour l'instant, là-bas,
mais permettez-moi de taper le nom ici-bas,
et puis l'autre e-mail, de sorte que le hic, c'est courriel
et le nom, évidemment pas des entiers, nous allons donc modifier celles-ci à un autre champ.
Il s'avère varchar, de longueur variable char,
C'est comme une chaîne dans une base de données SQL
mais une longueur variable, et vous avez réellement pour lui dire à l'avance le
longueur maximale de la chaîne, donc je vais un peu arbitrairement
selon le type de convention 255 caractères.
Je ne pouvais tout dire 32. Je pourrais dire 1000.
Vous sorte de nécessité de décider par vous-même en fonction de vos données démographiques ce qui est
le plus long nom de l'élève et aller avec ce numéro ou un peu plus grand,
mais ce qui est bien sur un varchar est ça ne va pas perdre
255 octets sur le nom de chaque élève.
Si c'est DAVID ça ne va pas à utiliser un ensemble de 255 octets,
mais c'est une limite supérieure, donc je vais aller avec 255 seulement par convention,
mais nous pourrions en discuter à une certaine valeur inférieure, et adresse e-mail
que ce soit cohérent 255, mais encore une fois, nous pourrions avoir le même débat.
Mais je vais faire autre chose ici sur le côté droit.
>> Quel est puissant sur une base de données est qu'elle peut faire beaucoup de levage lourd
ou un travail complexe pour vous.
En particulier, je n'aime pas ce que les numéros d'identification de mes élèves sont.
C'est juste censé être un identificateur unique dans une base de données
j'ai donc une représentation succincte 32-bit de cet étudiant
de sorte que je avoir un moyen de les identifier de façon unique
afin qu'il n'y ait deux Davids, par exemple, dans une classe.
En fait, je vais cocher cette case AI, incrémentation automatique,
de sorte que la base de données, MySQL, trouve
quelle pièce d'identité à chaque élève nouvellement inséré est va être.
Je n'ai même pas à se soucier que dans mon code,
et je vais aussi choisir quelque chose dans le menu d'index.
L'indice de descendre a ici primaire, unique,
index et texte intégral.
Vous pouvez peut-être deviner ce que deux ou trois de ces choses,
mais il s'avère que les bases de données relationnelles
vous le programmeur ou l'administrateur de base de données pour obtenir préventive
donner des conseils à la base de données pour ce domaine
dans un tableau sont un peu spécial.
>> Par exemple, dans ce cas, je vais dire que l'ID
va être un index primaire, autrement connu comme une clé primaire.
Ce que cela signifie, par définition, c'est que désormais, ID
va identifier de manière unique les étudiants dans ce tableau.
Aucun étudiant aura le même ID parce que je suis d'imposer cette contrainte ou de cet indice.
Par ailleurs, ce que cela va faire pour moi, c'est que ça va dire
MySQL ID est spécial.
Je me soucie particulièrement sur l'ID, alors allez-y et faire de la magie de votre structure de données de fantaisie,
mettre en place une sorte d'arbre.
En général c'est quelque chose appelé le B-tree, que nous n'avons pas examiné les semaines,
mais c'est une autre structure de données telle dans le même esprit pour les arbres binaires
et tente que nous avons examiné, mais il va dire
à la base de données ce domaine est tellement important que je doute
veulent être en mesure de rechercher sur elle, aller de l'avant et de construire quelque fantaisie
structure de données en mémoire pour accélérer les recherches afin que, idéalement,
ils sont la constante de temps, ou du moins aussi près que possible
de sorte qu'il ne délègue pas dans la recherche linéaire, ce qui ne va pas être
le plus performant approche.
En revanche, l'adresse électronique aurait pu être une clé primaire.
>> En théorie, l'adresse électronique de chacun est unique, sauf si vous partagez une certaine considération,
mais ce n'est généralement pas bon d'utiliser quelque chose comme une chaîne
comme clé primaire, car si son but dans la vie est d'identifier de manière unique
lignes de votre table il n'y a aucune raison d'utiliser au maximum 255 octets
pour identifier quelqu'un si vous pouvez vous en sortir avec seulement 4 octets
ou un int 32-bit.
En général, une clé primaire doit être court et concis
et, idéalement, quelque chose comme un entier ou un grand int, qui se trouve être de 64 bits.
Mais une adresse e-mail doit être unique, et l'une des caractéristiques d'une base de données trop
est d'assurer l'unicité pour moi.
En sélectionnant unique, ici à côté de courriel, même si lui-même par courriel
défile hors de l'écran, je veux dire à la base de données
ne me croyez pas.
Ne me laissez pas insérer dans la base de données
la même adresse deux fois, même si je suis un idiot et ne suis pas
très bon avec mes IFS et IFS else et le code PHP réelle
et j'ai accidentellement laisser l'utilisateur inscrire une adresse e-mail existante
la base de données est encore un autre niveau de la défense pour l'exactitude
afin d'assurer que cette adresse e-mail en double ne se retrouvent pas dans le tableau.
>> Maintenant, par contre, pour le nom que vous n'avez probablement pas envie de faire cette unique
car alors il ne pourrait jamais être 2 Davids ou 2 Smiths Mike, par exemple,
dans votre base de données, de sorte que celui que nous allons laisser seul.
Je vais aller de l'avant et cliquez sur Enregistrer en bas à droite,
et tout semble bon, mais notez ici
c'est une partie que pour l'instant nous ne serons pas passer trop de temps sur
car la syntaxe est un peu complexe, et nous n'avons pas de créer des tables
tout ce que souvent, mais SQL elle-même est un langage,
dont la syntaxe est ici que j'ai mis en évidence.
Qu'est-ce phpMyAdmin fait vraiment, c'est qu'il crée une interface graphique basée sur le Web pour vous
avec lequel vous pouvez gagner du temps et ne pas avoir à saisir manuellement les
une requête SQL assez long comme ça.
>> En d'autres termes, si vous voulez créer manuellement cette table,
soit à ce phpMyAdmin noir et blanc rapide ou même dans
à l'aide de cet onglet autre, cet onglet SQL où vous pouvez taper des requêtes SQL
que vous voulez, franchement, cela aurait pris moi une minute
à réellement se souvenir de la syntaxe entière, et même alors, j'aurais probablement
fait quelques fautes de frappe, alors cet outil est utile pour des choses comme ça, et il est également instructif.
Vous pouvez commencer à déduire ce que la syntaxe est
seulement par la belle couleur de codage que phpMyAdmin est l'ajout d'
pour notre confort visuel.
Mais maintenant, nous allons le faire à la place.
Permettez-moi aller dans l'onglet insertion en haut, et laissez-moi aller de l'avant et insérez par exemple
un ID de, disons-en fait, je ne m'inquiète pas.
Il va incrémentation automatique. Je vais laisser la transaction de base de données à ce sujet.
Mais je serai David, et mon e-mail doit être malan@harvard.edu.
>> Allons de l'avant ici et mettre en Mike Smith comme un autre.
Je vais me donner un nom de famille aussi,
et nous aurons l'être smith@example.com,
et alors où dois-je aller?
Eh bien, il ressemble go est le bouton à cliquer, et le tour est joué.
Avis sur les 2 premières lignes insérées.
Il s'agit de la requête SQL réelle.
C'est l'outil phpMyAdmin exécuté pour moi,
mais le résultat final, un avis, si je maintenant passer à l'onglet Parcourir,
est de voir 2 lignes dans ce tableau, très réminiscent esthétique
de la table, nous avons vu plus tôt pour nos utilisateurs de pset 7,
l'un d'eux est David Malan, dont l'un est maintenant Mike Smith.
Mais juste pour être clair, je n'ai pas besoin d'utiliser phpMyAdmin,
et en effet, vous allez bientôt écrire du code pour pset 7
qui automatise le processus d'ajout de lignes, suppression de lignes, mise à jour des lignes et des autres,
alors laissez-moi plutôt aller dans l'onglet SQL ici
et tapez select * from élèves où
email = "malan@harvard.edu."
>> En d'autres termes Supposons maintenant que vous avez
une certaine forme HTML, et l'utilisateur tape son adresse email, entre autres domaines,
et l'objectif est désormais en PHP sur le code extrémité arrière
à rechercher en fait que d'autres détails de l'utilisateur.
Quel est votre nom? Quel est votre numéro d'identification?
Vous pouvez écrire une requête SQL comme ceci, select * from étudiants
où email = "malan@harvard.edu."
Et si je puis cliquez sur OK, vous remarquerez que je devrais, et en fait je le fais, récupérer une seule ligne.
Mike est omis dans ce jeu de résultats, comme la collection de lignes
est généralement appelé, parce qu'il n'a pas la même adresse email que moi.
>> Maintenant, encore une fois, ici pour pset 7, vous pouvez utiliser phpMyAdmin un outil administratif
et un outil pédagogique pour apprendre votre chemin
dans le monde de SQL, mais à la fin de la journée
vous allez écrire ces requêtes à l'intérieur du code PHP réelle,
et alors restez à l'écoute procédure pas à pas Zamyla en particulier
où vous pouvez obtenir une visite du code de distribution de ce problème posé
où nous vous avons donné non seulement l'esthétique de la page de connexion
et le joli logo sexy qui dit CS50 finances, mais nous avons aussi vous donné
un tas de fonctions qui feront de votre vie un peu plus facile.
Nous avons également écrit une partie de la pset pour vous,
la partie de connexion de celui-ci en particulier, pour vous donner une idée d'un design représentant
qui utilise effectivement un contrôleur, par exemple, index.php,
login.php et autres, et puis vous verrez le pset dispose également d'un répertoire templates
qui a toutes vos vues, toutes les esthétiques.
Et si le flux global dans pset 7 va être que
vos utilisateurs visitent un contrôleur via une URL dans un navigateur.
Ce contrôleur contient du code PHP que vous avez écrit, et à l'intérieur de votre code PHP
peut-être quelques lignes de SQL imbriquées entre guillemets
et transmis à une fonction, nous avons écrit requête appelé
qui vous aidera à parler à la base de données sans utiliser quelque chose comme
un outil d'administration comme phpMyAdmin.
>> Vous serez en mesure d'écrire des instructions SQL dans le code PHP
et obtenir un tableau PHP du jeu de résultats,
des lignes correspondant effectivement à cette requête.
Et de même que vous serez en mesure d'effectuer des insertions ou des suppressions
ou mises à jour ou analogues, la syntaxe pour ce qui est assez similaire,
et vous verrez de certaines références en ligne, à partir de la clé de répartition
et de la pset se emballer exactement comment s'y prendre pour le faire.
Réaliser en fin de compte nous ne faisons qu'effleurer la surface de SQL
et de MySQL, mais la puissance de celui-ci est vraiment ce qu'il vous libère
de se concentrer sur les problèmes que vous voulez résoudre, les cas d'utilisation que vous voulez mettre en œuvre
sans avoir à se soucier tout autant, du moins au début,
où et comment stocker et rechercher votre base de données,
et cela est tout à fait littéralement où Facebook lui-même a fait ses débuts
utilisez MySQL, puis en utilisant plus de serveurs MySQL et encore des serveurs MySQL
avant longtemps, jusqu'à ce qu'ils devaient alors vraiment commencer à penser sérieusement à la manière de
stocker des données, comment stocker des choses encore plus efficace,
si bien que nous allons prendre pour acquis le fait que les index et les contraintes uniques
et ainsi de suite juste travailler il ya une très intéressante conversation
que tout cela peut éventuellement conduire à, donc se rendre compte que nous ne faisons que gratter la surface
de ce qui pourrait éventuellement pour vous ou vos projets deviennent un peu des données importantes.
>> Cela dit, nous allons terminer ici, et nous nous reverrons la semaine prochaine.
[CS50.TV]