>> R.J. AQUINO: Disons juste commencer.
C'est donc Quiz 1.
Voici quelques informations de haut niveau.
La page A propos du quiz est à ce URL, plus CS50.net, bien que
fonctionnera toujours.
C'est CS50.harvard.edu/quizzes/2013/1.
C'est la grande page A propos, vous dire où et quand, à savoir mercredi prochain
dans un tas de pièces.
Et d'ici mercredi prochain, je dire dans deux jours.
Toutes ces informations sont là.
Mais il est cumulatif.
>> Alors tout de la première moitié de la an est potentiellement sur le quiz,
parce que vous ne pouvez pas vraiment faire de pointe choses dans C sans si les conditions et
pour les boucles et analogues.
Mais il y aura un accent sur la matériel couvert depuis Quiz 0,
à partir de struct et fichiers I / O. C'est généralement plus
difficile de Quiz 0.
Le score moyen est généralement inférieur.
Travailler dur.
>> Alors que vous êtes étudiant, veillez à utiliser CS50/discuss y poster vos questions
et lire les questions des autres personnes.
Donc, si vous n'avez pas de questions, identifier et de lire
aux questions de vos amis.
Ils sont probablement de bonnes questions.
Et faire les tests de pratique.
Nous avons donné des questionnaires pour sept ou huit ans.
Ils sont tous en ligne.
Futures questions sont similaires à de vieilles questions.
C'est ainsi que nous faisons.
>> Le quiz n'existe pas encore.
Aucun d'entre nous ont vu.
Mais il va ressembler quiz précédents.
Pour cette session d'examen, ce n'est pas une liste exhaustive des sujets.
Vous ne pouvez pas assister à cette puis être parfaitement prêt pour le test.
Dans le cas contraire, il ne serait pas que beaucoup de quiz.
Et ce n'est pas non plus nécessairement tout ce que vous devez savoir sur tout
donné le sujet.
Il est destiné à vous exposer à des choses nous avons couvert, vous rappeler ce que nous
couvert, et de la manière qui nous recouvrait.
Mais vous aurez à aller plus loin et plus profond lorsque vous étudiez à double vérification
que vous savez tout sur tout donné sujet et que vous avez rempli
tous les coins, qui étaient couvert de conférence.
>> Les notes de quiz vous dire d'aller à la notes du greffier, regarder des vidéos de conférences.
C'est une bonne façon de vous assurer que vous avez couvert toutes vos bases.
Donc commencer, quand j'ai fait ces diapositives, j'ai essayé de mettre où je trouvai
information.
Donc, pour File I / O, par exemple, la semaine 7, Lundi de conférence, et l'écrit
Section 6 et problème Set ont tous informations sur File I / O. Je l'ai fait
ce pour chaque sujet.
Donc, ces diapositives de titre peut vous être utiles.
>> Nous avons donc ici File I / O. Rappelez-vous, Problème défini 5, nous avons utilisé la fonction fopen, fclose,
fwrite, fread, et fseek.
Après avoir récupéré les fichiers JPEG et 30ish avoir redimensionné et sali avec
bitmaps, vous devriez être assez familier avec ces fonctions
et comment ils fonctionnent.
Si vous n'êtes plus familier, certainement les examiner.
Et assurez-vous que vous comprenez ce que les différents arguments sont,
quand ils sont utilisés.
>> Mais les bugs liés aux fichiers-communes vous pouvez être invité sur -
bien, si vous avez oublié de vérifier si fopen effectivement travaillé avant d'aller vous
modifier un fichier.
Cela pourrait être mauvais.
Si vous avez oublié de fclose un fichier que vous avez fopened, qui est semblable à
une fuite de mémoire.
C'est assez mauvais.
Et oublier de vérifier si vous avez atteint la fin du fichier avant de
commencer à écrire pour elle.
>> Donc, si vous dites, bon, je suis à la fin du fichier.
Donnez-moi 5 plusieurs octets.
Eh bien, c'est probablement pas travailler sur la façon dont vous vous attendez.
C'est vraiment pour File I / O, parce que nous avons tellement de lui
le problème réglé.
Donc, si vous avez compris ce qui se passait dans le problème Set 5, rappelez-vous les bitmats
et les fichiers JPEG, alors vous êtes probablement tous fixée pour File I / O. Si c'est un peu
floue, certainement examiner ce problème définir et le matériel associé.
>> Structures étaient le sujet qui était sur le ligne entre 0 et Quiz Quiz 1.
Vous n'avez pas tout à fait faire la coupe pour Quiz 0.
Donc, ils vont certainement être sur Quiz 1, Semaine 7, lundi.
Qu'est-ce qu'une structure?
Ici, nous montrons une structure.
C'est comme un nouveau type.
C'est comme un conteneur pour de multiples domaines.
>> Dans ce cas, nous avons déclaré une structure étudiant qui a deux champs -
une chaîne qui nous demandons le nom et un int qui nous appelant âge.
Alors, quand je passe autour étudiants ou je modifier étudiants, je serai en mesure de
accéder à leur nom et leur âge.
Regardons un peu de code pour cela.
Nous voyons ici que j'ai déclaré un étudiant s, tout comme
Je déclare une variable -
int x, int y, et cetera.
>> Voici étudiant s.
Il commence avec rien dans ses champs.
Donc, nous allons définir eux.
Vous définissez les champs d'une structure avec un point.
Donc je l'ai dit ici que s.name = RJ.
Et s.age = 21.
Vous pouvez également mettre à jour les champs de la même manière que vous souhaitez mettre à jour
la valeur d'une variable.
Donc, je veux changer mon nom de RJ avec pas de périodes à R.J. épeautre l'
manière correcte.
Il serait s.name = RJ, le même comme nous l'avons dit au départ.
Et puis vous pouvez y accéder.
>> Donc, nous les avons mis.
Nous les avons mis à jour.
Vous pouvez également y accéder dans le même sens.
Donc ici, je vais imprimer R.J. Est âgé de 21 ans.
Et je accéder à ces valeurs avec s.name et s.age.
Voilà donc l'accès struct avec la notation par points.
Yep, la question?
>> PUBLIC: Y at-il une raison à l' diapositive précédente que vous n'avez pas mis
étudiant sur la première ligne, comme typedef étudiant de structure et
étudiant à la fin?
>> R.J. AQUINO: Donc la question était, cette diapositive, nous avons généralement constaté
typedef struct noeud, puis le champs de la structure et
alors le nœud de texte.
Et comment se fait ici, je n'ai pas dit, typedef étudiant de structure et la
champs de la structure, puis étudiant?
La raison en est que je n'ai pas besoin de accéder à l'intérieur de la structure.
Donc, c'est OK pour quitter sans un nom.
Je ne peux laisser comme une structure anonyme.
>> La raison pour laquelle nous le faisons pour les listes chaînées et choses est parce qu'à l'intérieur vous avez besoin
pour faire référence à une étoile nœuds de struct.
Ainsi, la structure doit avoir un nom, de sorte que vous pouvez y accéder plus tard.
C'est un détail mineur.
Mais vous voyez généralement typedef struct accolades si vous n'avez pas besoin
le nom et typedef struct un nom suivie par des accolades si vous voulez
besoin du nom.
Donc, c'est une bonne question.
>> Et sur ce point, nous avons tendance à modifier struct et passer autour struct par
référence, et non par valeur.
Nous allons donc passer autour des pointeurs vers struct au lieu de passer autour de la
se structures.
Donc, vous êtes très souvent allez être en utilisant, dans ce cas, l'étudiant * ou
struct noeud * ou noeud * au lieu à des étudiants ou des nœuds.
Donc ici, je l'ai dit, OK, la variable ptr va être l'adresse de l'art.
Ça va être le pointeur à l'étudiant R.J.
>> Ainsi, nous pouvons obtenir à ces domaines le même que nous obtenons quelque chose.
Premièrement, ID de référence le pointeur pour obtenir la structure.
C'est * ptr puis un point, puis l'âge.
Donc, pour accéder au champ, et j'ai mis à jour il maintenant à 22, parce que, soyons
par exemple, c'était mon anniversaire.
Il ya une syntaxe de raccourci en utilisant la flèche ici.
Âge flèche Donc ptr est juste la même que * ptr.age.
Maintenant, c'est quelque chose que vous aurez de mémoriser et de rappeler.
>> Vous l'avez utilisé beaucoup dans pset6, l'ensemble de processeurs de correcteur orthographique.
Mais c'est en fait ce qui se passe le dessous de la hotte.
C'est le déréférencement du pointeur et puis y accéder.
Question?
>> PUBLIC: [inaudible].
>> R.J. AQUINO: Alors, pourquoi utilisons-nous pointeurs que struct au lieu de la
se structs?
La raison serait si vous êtes de passage une structure à une fonction, vous avez probablement
vouloir passer autour juste 4 ou plus octets qui représentent le pointeur, en tant que
opposition à la 30 ou potentiellement 40 octets qui sont le struct.
Donc passant quelque chose à une fonction est plus facile quand la chose
est plus petit en somme.
Question?
>> PUBLIC: Vous pourriez avoir mentionné ce au début, mais il n'y
autres diapositives s'allume sur [inaudible]?
>> R.J. AQUINO: Ces diapositives seront après la session d'examen.
Nous les publierons sur le site.
Donc passer et passer légèrement plus rapide, nous allons parler de données
structures.
Il ya beaucoup.
Nous avons couvert un tas d'entre eux.
Voici ce que vous devez comprendre sur la structure des données.
>> Vous devriez vraiment comprendre à un niveau élevé Quel niveau de chaque structure est.
Pouvez-vous expliquer en anglais à votre ami qui n'a pas pris CS50 comment
nous organisons nos données et pourquoi nous avions être en utilisant quelque chose de cette façon?
C'est chose un.
Chose deux, comprendre la mise en oeuvre.
Donc, comprendre comment utiliser ces choses dans C. Et nous irons à ce sujet.
>> Et puis chose trois serait connaître le temps d'exécution et les limites de la
différentes structures que vous utilisez.
Donc, comprendre pourquoi vous devez utiliser un la table de hachage au lieu d'un tableau.
Comprendre comment rapide, en moyenne, accès à une table de hachage est.
Comprendre ce que les opérations sont rapides sur liste chaînée, mais lente, sur des tableaux et
vice versa.
Donc, pour comprendre cela, vous aurez à comprendre la notation Big-O juste savoir
comment parler de ces sortes de choses.
Et nous en reparlerons.
>> Donc, première chose, listes liées.
Voici une image de haut niveau d'une liste chaînée.
Nous montrons ce en classe.
Nous avons généralement 10 personnes debout sur la scène.
Mais nous avons une série de noeuds où chaque noeud a une certaine valeur et un pointeur
à sa prochaine valeur.
Donc, pour aller d'un noeud à l'autre, vous simplement dire, donnez-moi le noeud suivant.
Vous avez ce nœud.
Donnez-moi le noeud suivant.
Vous avez ce nœud.
Donnez-moi le noeud suivant et ainsi de suite jusqu'à ce qu'il n'y a pas de noeud gauche.
>> Donc continuer à parler à un niveau élevé.
C'est très facile à insérer les choses dans une liste chaînée.
Si vous ne vous souciez pas de l'ordre, vous pouvez simplement laisser tomber
dès le début.
C'est la constante de temps.
Mais il est difficile de trouver une valeur.
Si vous essayez de demander, est sept dans ma liste?
Vous devez passer par chaque valeur unique.
Est-ce sept?
Maintes et maintes fois.
Et c'est O (n).
Donc, lors de l'étude pour le quiz, comparer avec les tableaux.
>> Est-ce OK?
Les lumières se sont faible.
OK.
Quand est une liste chaînée mieux?
Quand est un tableau de mieux?
Alors regardons un peu de code.
Voici un noeud de potentiel.
C'est une structure.
Il dispose d'une int n, qui sera notre valeur.
Et il a un noeud de struct * à côté, qui Notre pointeur vers le noeud suivant.
Donc, ici, nous pouvons voir que nous sommes tombés avoir mis un int dans notre nœud.
Mais s'il s'agissait d'une liste liée de l'omble étoiles ou une liste chaînée de chars, nous
totalement pourrait le faire aussi.
>> Rappelez-vous dans pset6, vous avez probablement eu une liste chaînée d'étoiles de type char ou seulement
tableaux char statiques.
Voyons ici à une opération.
Donc, nous voulons insérer un nouveau n dans notre liste chaînée.
Nous commençons avec un pointeur de tête qui est un pointeur sur ce noeud qui a l'
La valeur de n et un côté d'un pointeur qui des points à ce nœud est une valeur de
n et un côté de null, car c'est le dernier noeud.
Donc, dans l'intérêt de temps, je vais mettre tout le code sur l'écran.
Et nous marcherons à travers elle quelques lignes à la fois.
>> Alors, voici le code.
J'espère que c'est lisible.
La première chose que nous faisons est nous malloc un nouveau nœud.
Il est donc un pointeur vers un nouveau noeud qui ne pas tout à fait quoi que ce soit réglé
en elle encore.
Nous vérifions pour s'assurer que le nouveau nœud n'est pas nulle.
Sinon, nous devons abandonner.
Donc, après avoir vérifié que, nous maintenant définir les valeurs dans le nœud.
Nous avons donc mis le nouveau n dans notre champ de n.
Et nous avons mis la prochaine pointeur pour pointer vers la tête d'origine, de sorte que nous pouvons
maintenant ont inséré ce noeud dans notre liste.
>> Enfin, nous avons le point de tête mondial à notre nouveau nœud, de sorte que si nous devions
commencer à tête, nous serions à ce nouveau premier noeud au lieu de
l'ancien premier noeud.
Et lorsque cette fonction se termine, le nouveau nœud de variable n'existe plus,
car il était local à la fonction.
C'est donc l'état du monde.
Notre siège mondial souligne notre nouveau premier noeud qui pointe vers notre
premier noeud d'origine, dont les points au noeud après.
>> C'était insertion.
J'espère que c'était relativement simple à suivre.
En cas de doute, faire un dessin.
Je trouve que parler listes chaînées et regardant
code est très pas utile.
Considérant que regarder une image d'un lien liste me permet de penser, oh, si
J'ai ce noeud.
Mais si je mets à jour ce pointeur, il se retrouve déconnecté.
Et j'ai oublié où le nœud va.
Et le code quitte.
Et vous avez plusieurs nœuds qui sont déconnectés.
Et vous ne finissent pas avec la liste que vous voulez.
>> Donc, si vous dessinez l'image et faites-le étape par étape, nous l'espérons, vous verrez
le bon ordre des choses en termes de mise à jour des pointeurs de s'assurer
que la liste vient ensemble.
Insérer est relativement simple.
Un plus compliqué serait insertion dans une liste triée.
Une fonction plus compliquée est de supprimer et trouver, si en regardant à travers une liste de
voir si quelque chose est là.
Peut-être que vous l'avez fait dans pset6 lorsque vous avez dans votre table de hachage et vous l'avez dit,
bien, est le mot pomme dans ma liste chaînée?
>> Donc, vous avez peut-être déjà fait.
Mais certainement, vous rafraîchir la mémoire et essayer de trouver et réimplémenter
réimplémenter supprimer une liste chaînée.
Fun note côté, là aussi doublement lié listes, où vous avez
pointeurs qui pointent vers l'avant et vers l'arrière, de sorte que vous pouvez aller à la
prochain noeud et au noeud précédent.
Et il y avait une question sur l'an dernier questionnaire de ce type, parler
sur les listes doublement liée.
>> Maintenant, c'est une structure qui vous êtes relativement familier, parce que la plupart
vous probablement utilisé sur les pset6.
En voici une qui est un peu moins familier.
Comme une note de côté, je pense que le Test 1 est principalement plus difficile que Quiz 0, car
les choses que vous faites, vous ont pas fait autant.
Pour mettre les choses d'une autre manière, pour Quiz 0, vous aviez écrit un grand nombre de C. Et nous
vous interroge sur C.
>> Pour Quiz 1, nous allons vous poser des questions sur PHP et JavaScript, qui vous
ont pas écrit autant de.
Nous allons vous poser des questions sur C-code vous n'avez pas écrit autant de,
C ce truc avancé.
Donc vraiment, pratiquer le nous stuff parlé dans la leçon que vous
ne l'a pas nécessairement sur le problème posé.
>> En parlant de cela, vous n'avez pas écrit une pile sur un problème réglé.
Mais c'est en cours.
Voici l'image de haut niveau de piles que nous montrons chaque année.
Il s'agit de la pile de plateaux dans la salle à manger Mather.
À un niveau élevé, les piles sont un dernier in, first out la structure de données.
Cela signifie que vous allez à mettre les choses en -
1, 3, 7, 12, 14, 0 négative.
La seule chose que je ne pouvais pas avoir dit - négatif 3, 0.
Vous mettez toutes ces choses po
Et le dernier que vous mettez dans la première celui qui va sortir.
>> Vous avez donc deux opérations -
pousser et pop.
Tous les mets dans que j'étais des gestes de ce genre sont poussoir.
Et puis, quand j'arrive pour saisir quelque chose ou rejoindre sur le dessus pour saisir
quelque chose, c'est pop.
Donc, nous allons mettre en œuvre des piles.
Et nous leur avons montré en conférence l'utilisation des tableaux.
Mais vous pouvez les faire en utilisant les listes chaînées.
Une pile est une donnée conceptuelle la structure, pas comme un
une mise en œuvre spécifiques.
>> Alors qu'est-ce que cela ressemble?
Il semblerait un peu comme cela.
Vous auriez une taille d'un entier.
Et vous auriez un tableau de valeurs qui nous appelons plateaux, parce que c'est
quelle était l'image pour nous - RC plateaux -
et puis une certaine capacité maximale.
Donc, ce serait pousser ressembler?
Eh bien, si nous avons une pile s, puis à pousser quelque chose sur s, nous aurions
la taille de l'art.
Et ce serait la prochaine endroit ouvert de notre gamme.
Donc, si nous avons trois choses dans notre pile, alors plateaux 3 serait la prochaine
endroit ouvert, parce que 0, 1, et 2 sont déjà remplis.
>> Nous avons donc la valeur en s.trays [s.size], la troisième place.
Et puis on incrémente s.size à dire, hey, nous avons eu trois choses avant.
, Nous avons maintenant quatre.
Alors la prochaine fois que vous poussez, vous êtes va mettre quelque chose dans 4.
Ou la prochaine fois que vous sautez, vous allez regarder 3 au lieu de 4 ou autre.
Et puis nous reviendrons à vrai dire, hey, nous avons réussi.
Cela a fonctionné.
En règle générale, si une fonction qui est supposée retourner true ou
false renvoie toujours vrai, vous pouvez ont fait quelque chose de mal.
Donc ça marche?
>> Eh bien, il fonctionne très bien pour 1, et 2, et 3, et 4, et cinq.
Mais disons que j'atteins ma capacité.
J'ai alors couru dans un problème, parce que si la taille est la même que la capacité, je suis
maintenant essayer de mettre quelque chose dans un tableau où je n'ai pas d'espace.
Donc une courte chèque à résoudre ce problème.
Si s.size == CAPACITÉ, retourne false.
Sinon, aller et faire ce que nous avons fait.
Alors quoi d'autre pourrions-nous demander sur des piles?
Que devez-vous étudier?
Que devez-vous pratiquer?
>> Eh bien, la mise en œuvre pop.
Nous avons déjà fait pousser.
Je vais arranger ça.
Une mise en œuvre n'est pas un tableau, où vous utilisez une liste liée, peut-être.
Une mise en œuvre non-int.
Nous avons ints ici.
Mais cela aurait pu être flotteurs.
J'aurais pu cordes.
Il aurait pu étoiles carac.
Regardez quiz passées pour les types de questions que nous avons posées sur les piles.
>> Je dirai que nous avons couvert les piles dans le même que nous les avons couverts de
dernières années.
Ainsi, les questions de quiz devrait être une bonne indication.
Aller de l'avant encore plus vite, les files d'attente.
Ils sont comme des piles.
Mais ils sont d'abord entré, premier sorti.
Si vous êtes britannique, le mot file d'attente probablement fait beaucoup de sens pour vous.
Sinon, vous pouvez avoir entendu parler de lui comme une ligne.
Ils fonctionnent comme la ligne sur l'Apple Store.
La première personne à se présenter à 03h00 le matin est le premier
personne pour acheter son iPad.
>> Nous avons donc deux opérations -
enqueue et dequeue.
Enqueue met quelqu'un dans la ligne.
Dequeue tire le premier personne sur la ligne.
Encore une fois, nous pouvons mettre en œuvre ce avec un tableau.
Alors, quelle est la structure de nous montré en conférence?
C'était celui-ci.
Là encore, les chiffres.
Encore une fois, la taille et cette nouvelle chose avant.
Pourquoi est-il quelque chose appelé avant?
C'est l'indice de la prochaine Elément de dequeue.
C'est juste garder à l'intérieur de la piste le premier mec à se manifester, afin que nous
peut le sortir quand il le faut.
>> Certainement regarder les notes de cours et essayer de mettre en œuvre enqueue et dequeue
lors de l'étude pour le quiz.
Des choses importantes à penser.
S'enroulant autour si l'avant, plus le taille finit plus de capacité.
Encore une fois, si votre structure est complète, vous allez avoir un problème.
Hash tables que vous avez vu avant.
La plupart d'entre vous probablement mis en œuvre ceux-ci sur pset6.
C'est une structure qui vise à O (1) insertion de la constante de temps et O (1)
recherche constante de temps.
>> En CS50, nous avons mis ce que un tableau de listes chaînées.
L'élément clé à une table de hachage est la fonction de hachage.
Donc, il convertit votre entrée, disons, un dictionnaire de mots, en un certain nombre,
qui va être notre index.
Et nous allons utiliser cet index dans notre tableau.
Alors, voici une petite image mignonne de study.50.net.
Nous jetons tous les mots dans notre fonction de hachage.
Et la fonction de hachage nous dit où mettre ces mots.
>> Cela est d'autant grande dans le pays où il n'y a qu'un mot pour chaque emplacement.
Mais que vous vous souvenez de pset6, il sont plus de mots que les fentes.
Donc ce qui arrive quand vous obtenir une collision?
Au lieu de stocker une valeur dans, disons, table de hachage 3, vous
stocker une liste chaînée.
Et si au lieu d'avoir cantaloup ici, vous auriez une liste chaînée,
où le premier noeud est le cantaloup.
Et le nœud suivant est chat.
Et le troisième noeud de collision, nous allons dire, parce que tous ces mots commencent
avec C.
>> Ainsi, la plupart d'entre vous ont fait ce pour pset6.
Si vous n'avez pas fait une table de hachage sur pset6 et vous avez essayé quelque chose comme
un trie, revoir définitivement les tables de hachage.
Si vous avez faites sur pset6, définitivement examiner les tables de hachage.
Et si vous l'avez fait sur pset6 et il n'a pas travailler tout à fait raison et vous
eu beaucoup de mal avec elle, définitivement examiner les tables de hachage.
Donc, la leçon est vraiment définitivement examiner les tables de hachage.
>> La grande minorité d'entre vous essayé tente sur pset6.
Image de haut niveau.
C'est quelque chose comme ça, où chaque noeud dispose d'un ensemble d'enfants, où chaque
enfant correspond à une lettre.
Et chaque nœud dit aussi, hey, je suis un mot.
Donc, dans ce cas, le mot de Maxwell, si vous suivez le M de la A à la
X-W-E-L-L et puis suivez l'un plus.
Et vous obtenez ce symbole, delta, qui nous signifions à dire c'est un mot.
Donc, Maxwell est un mot.
Ces deltas sont dans l'ensemble signifiant où les choses sont des mots et qui
les choses ne sont pas.
>> Ainsi, dans pset6, les données que nous stockées aux côtés de l'un de nos nœuds était «Je suis un
mot. "Et la chose cool à propos de tentatives est qu'ils démontrent l'insertion et
rechercher dans O (longueur d'un mot).
Il suffit donc de passer à travers Maxwell, c'est M-A-X-W-E-L-L. Donc, sept ou huit -
Je ne peux pas compter -
étapes pour arriver à la fin et vérifier les choses.
Mise en œuvre aussi rapide ici.
Rob est passé par un lien liste dans son post-mortem.
Donc vérifier.
Désolé.
Je suis passé par un trie dans son post-mortem.
Donc vérifier.
>> Mais vous avez fondamentalement chaque noeud a 27 pointeurs vers les prochaines nœuds et un
Boolean suis-je pour un mot.
Consultez le post-mortem de Rob pour combien ceci est effectivement mis en oeuvre.
Notre structure finale, nos arbres et arbres binaires de recherche.
Donc, en regardant ceux-ci, ceux-ci ont été couverts plus récemment la Semaine 8, lundi.
Un arbre est similaire à un trie, sauf que vous n'ont pas nécessairement 27 noeuds à
chaque point.
Et vous n'avez pas ces données à chaque l'étape qui indique si le -
le chemin n'a pas d'importance.
Alors qu'un trie, le chemin de haut en fond, Maxwell, était important pour nous.
>> Mais chaque noeud a multiple enfants, peut-être.
Nous avons un peu plus de vocabulaire.
La racine de l'arbre est au sommet.
Et nous disons que le très plus basse les noeuds qui n'ont pas d'
les enfants sont les feuilles.
Donc, comme un trie, un arbre est une structure de noeuds.
Un type courant de l'arbre que nous allons parler est un arbre binaire, où
chaque nœud n'a pas d'enfants ou un ou deux enfants.
Donc, cette image n'est pas ici un arbre binaire, car
nœud 3 a trois enfants.
>> Mais si nous devions ignorer ceux, le reste de celui-ci est un arbre binaire, car il
démontre la propriété que chaque nœud a zéro, un, ou deux enfants.
Alors, comment pourrions-nous exprimer dans le code?
Nous pourrions avoir un noeud où chaque noeud a un nombre entier à l'intérieur de celui-ci, ainsi
comme un pointeur vers l'arborescence de gauche et un pointeur vers l'arborescence de
droite, de sorte que les deux enfants.
Comment est-ce utile?
Eh bien, si nous faisons des règles sur l'endroit où nous mettre nœuds, nous pouvons faire une recherche plus rapide.
>> Donc, il ya une notion de recherche binaire arbre, où tous les nœuds du
sous-arbre gauche ont une valeur inférieure que le nœud nous regarder.
Et tous les nœuds du sous-arbre droit avoir une plus grande valeur
que le noeud racine.
Maintenant, qui ressemble à un grand nombre de mots.
Je vais mettre à l'intérieur de la double devis et vous montrer une photo.
Voici donc un exemple de un arbre de recherche binaire.
Voyons que nous commençons avec 10.
Tout à la gauche de 10 est plus petit que lui.
Et tout à droite est plus grand que lui.
>> Mais plus encore que cela, chaque noeud l'arbre exprime cette propriété.
Donc le noeud 7 a une 3 à la à gauche et un à droite 9.
Donc, tous ceux qui sont plus petits que 10.
Mais en regardant juste ceux qui, le 7 a 3 à sa gauche et 9 à droite.
Et de même sur la droite, 15 a 14 à sa gauche et 50 à droite.
Ainsi, les trois nœuds plus là, 15, 14, et 50, sont également un arbre binaire valide
ou un arbre binaire de recherche valide.
Et ils sont tous plus grands que 10.
Ils sont donc autorisés à être sur la droite il.
Y at-il une question?
>> PUBLIC: Comment réagissez-vous quand vous avez deux sept?
>> R.J. AQUINO: Ouais.
Comment gérez-vous les deux valeurs qui sont les mêmes?
Certains arbres binaires de recherche disent que vous ignorer les doublons, parce que le but est
juste pour dire, j'ai vu ces choses jusqu'à présent.
Certains arbres binaires de recherche, vous pouvez dire avoir un comptage à l'intérieur du noeud.
D'autres pourraient dire que tout ce qui la gauche est inférieure ou égale à.
Et tout à droite est supérieure.
>> Cela dépend de ce que le problème est que vous résolvez.
Donc, dans un dictionnaire, par exemple, vous ne serait pas soucier de doublons.
Vous voulez les jeter.
Mais un autre problème que vous pourriez soins.
>> PUBLIC: Est-il possible d'avoir un 1 à la gauche de 15, ce qui
est inférieure à 10?
>> R.J. AQUINO: Non
Si le 14 ici étaient un 1, ce serait ne pas être un arbre binaire de recherche valide,
parce que tout à droite de 10 doit être plus grand que lui.
Et nous allons voir pourquoi.
Si, dans le pays de recherche, mon objectif est de trouver 14, je commence à la racine.
Donc, je regarde.
OK.
Nous allons commencer à la racine.
Regardez 10.
>> Eh bien, 14, notre objectif, est plus grand que 10.
Donc, il doit être sur la droite.
Ceci est très similaire à l'ensemble de téléphone livre chose que nous avons, le binaire
chercher là-bas.
Mais au lieu de la recherche binaire dans un tableau, nous sommes binaire
recherche dans cet arbre.
Donc, nous sommes toujours à la recherche de 14.
Eh bien, 14 est plus petit que 15.
Donc, si c'est dans notre arbre, il doit être dans ce domaine ici.
Il doit se trouver à droite de 10 et à la gauche de 15.
>> Et si nous vérifions ce nœud.
Et yay, nous avons trouvé 14.
Je ne vais pas passer au travers.
Mais voici le code.
C'est en fait relativement simple,
car cette fonction est récursive.
Que pourrions-nous vous demander de faire un test?
Nous pourrions vous demander d'écrire ce code.
Nous pourrions vous demander de regarder le code et modifier ce code et expliquer ce
qu'il fait.
Ouais.
Question?
>> PUBLIC: Est-ce que ces diapositives vont être mis à disposition comme ils étaient la dernière fois?
>> R.J. AQUINO: Oui.
Ainsi, ces diapositives sera certainement être affiché.
>> PUBLIC: Ils sont effectivement publiés en ce moment sur le site.
David faisait ça.
>> R.J. AQUINO: Les lames sont en ce moment sur le site.
Je vais probablement patcher un couple de les fautes de frappe je noté et à les résoudre.
Mais il ya un courant version sur le site.
D'autres choses que nous pourrions vous demander de faire -
écrire insert.
Ecrire une version itérative de la fonction récursive nous venons vous a montré
ou parler de ces choses, comme dans paragraphes, des mots, des phrases.
En comparant les temps d'exécution et d'expliquer ce que vous souhaitez utiliser un binaire
arbre de recherche pour la place d'un la table de hachage, par exemple.
>> Donc, comprendre ces structures à un niveau très profond.
Comprendre comment les écrire, comment les utiliser, comment parler à leur sujet.
Et vous serez tous ensemble.
Question?
>> PUBLIC: Quand vous écrivez le arbre binaire de recherche, comment vous faites
déterminer la valeur à faire comme la racine?
>> R.J. AQUINO: Donc la question était, ce valeur faites-vous en tant que root?
En fonction de votre code, vous peut avoir une racine mondiale.
Donc, vous avez probablement eu à pset6 une table globale de hachage.
Ou vous pourriez passer la racine comme argument.
Donc, cette fonction de recherche ici prend un argument un noeud *.
Et si le noeud qui vous arrive d'être regarder est celui que vous traitez
comme racine lorsque vous passez po
Et je suis prêt.
Ce sont mes diapositives.
La prochaine personne peut venir échange dans un ordinateur portable et le micro.
>> ROB BOWDEN: Je pense que je pourrais avoir interprété cette question différemment.
Mais je interprété comme, si vous avez les numéros 1, 2, et 3, comment pouvons-nous
savoir faire 2 la racine par opposition à 1 ou 3?
Si nous faisons 2 la racine, alors il est bien 1 et 3 à gauche et à droite.
Mais si 1 est la racine, alors il est 1 à l' haut, 2 à droite, 3 à droite.
Donc, par défaut, vous ne savez pas que faire la racine.
Et pour tout algorithme nous nous attendons à vous donner, que la première chose que vous
insert serait la racine.
Ou nous vous donnerions un arbre binaire existe déjà qui a une racine.
Mais d'autres algorithmes existent tels que la racine sera mise à jour, de sorte que si vous
se retrouver dans la situation où il est 1, 2, 3, il serait automatiquement mis à jour à
faire 2 la nouvelle racine, de sorte que il est toujours bien équilibré.
>> ANGELA LI: Cool.
Hé, les gars.
Je suis Angela.
Et je vais finir notre C et ensuite aller dans une partie de notre web
technologies -
HTTP, HTML, CSS et.
Donc la première chose est de tampon les attaques de dépassement.
Donc, nous allons jeter un oeil à ce code.
C'est assez simple.
Il ya une fonction foo.
Et il ne retourne rien.
Mais il faut dans un pointeur à une chaîne appelée bar.
>> Et il va déclarer ce tampon, qui est un personnage
tableau qui dispose de 12 emplacements.
Et il utilise memcpy, qui est juste un fonction que les copies d'une adresse
à une autre.
Donc essaie de copier dans notre tampon de quelque
bar pointe.
Alors une idée de ce qui ne va pas avec ce code?
>> PUBLIC: Si la barre est plus longue que C, ils écraser.
>> ANGELA LI: Oui, exactement.
Nous n'avons aucune garantie que la barre va être inférieur à 12.
Nous avons juste fait un certain nombre arbitraire 12.
Et nous étions comme, espérons que notre entrée de l'utilisateur est inférieur à
12 caractères de long.
Ainsi, dans un monde idéal, si notre entrée est toujours comme prévu, puis nous passerons
quelque chose comme bonjour.
C'est moins de 12 caractères.
Il est lu en char c.
Et puis nous faisons quelque chose avec elle.
Il n'a pas vraiment d'importance.
>> Mais une personne malveillante pourrait faire quelque chose comme cela, où ils
nous donner ce bar est orientée vers, il va signaler à ce grand tableau
de seulement un de.
Et c'est beaucoup plus long que 12.
Donc ça va aller tout le chemin ici-bas à l'endroit où le retour
adresse habitude d'être.
Donc, disons que cette fonction est appelé foo.
Peut-être que foo a été appelé par un autre fonction, qui a été appelé par principal.
Donc, si foo est en cours d'exécution, il faut de savoir où retourner.
>> Si foo a été appelé par une fonction nommée baz, il doit savoir que c'est
obtenu pour revenir à baz.
Et c'est ce que cette adresse de retour ici nous dit.
Mais si nous le remplacer par un autre adresse, dans ce cas, il s'agit d'une
représentation de l'adresse à la tout début de ce tampon, puis
ce qui va se passer réellement, c'est que au lieu de retourner vers baz,
qui appelle notre fonction, c'est juste passer à l'avant de ce code.
>> Et si c'était là parce que un malveillant pirate mec est venu et
injecté ce, alors peut-être ce montant d'A n'est pas réellement un de.
Et c'est en fait juste coder que les pauses votre ordinateur ou quelque chose.
Donc, pour être sur la défensive sur ce genre de chose, vous devez jamais supposer que
l'entrée d'utilisateur est un certain quantité de caractères.
Par exemple, quand vous faisiez orthographique, on vous a dit que les mots étaient
ne va pas être de 40 caractères de long au maximum.
Et ce qui était bon.
>> Mais sinon, vous auriez à assurez-vous de lire que dans 45
caractères à la fois.
Sinon, vous pourriez remplacer votre tampon.
Vous avez des questions à ce sujet.
Ouais.
>> PUBLIC: Pourriez-vous nous parler un peu plus sur ceux-ci?
>> ANGELA LI: Désolé.
Oui.
>> AUDIENCE: Le micro est juste pour la vidéo.
Je vais essayer de projet.
Salut, les gars.
Sup?
Donc, revenons sur quelques choses dans le bibliothèque CS50, que vous avez utilisé
tout le semestre, la plupart du temps d'obtenir les commentaires de l'utilisateur.
Comme vous le savez, vous incluez le CS50 bibliothèque en faisant juste CS50.h, qui
contient tous les prototypes de l' fonctions que vous pouvez utiliser, comme
GetString et GetInt, et GetFloat, et cetera.
Et il ya cette ligne dans le CS50 bibliothèque qui définit une chaîne de caractères, qui
vous les gars savent tous maintenant est juste un char *.
>> Mais jetons un coup d'oeil à comment GetString fonctionne.
Il s'agit d'une version très abrégée.
Vous pouvez retirer les fichiers de bibliothèque de CS50 de, je pense, manuals.CS50.net.
Et vous pouvez lire la fonction réelle.
Mais ce couvre une partie de les parties importantes.
Nous avons donc créé une sorte de tampon avec une certaine capacité.
Et ce que nous faisons, c'est que nous obtenir un caractère à un moment de la norme n.
C'est là que les entrées de l'utilisateur texte dans la console.
>> Et donc nous allons lire dans un caractère tant que ce n'est pas une nouvelle
ligne et ce n'est pas la fin du fichier, qui est la fin de l'entrée standard.
Et pour chaque caractère que nous lisons dans, si ce caractère se retrouve en ajoutant
pour le nombre de caractères que nous avons lu et c'est en plus de notre capacité,
alors ce que nous faisons est de redimensionner seulement notre tampon de sorte qu'il est deux fois plus longtemps.
Encore une fois, cette protection contre les buffer les attaques de dépassement, parce que vous lisez dans
un caractère à la fois.
Et si à tout moment vous lisez trop beaucoup, vous venez de développer votre tampon.
Vous multipliez par deux.
Et puis, vous avez plus de place.
>> Sinon, il suffit d'ajouter un caractère de tampon.
Et une fois que vous avez lu dans tous les caractères, il va diminuer le tampon
retour à la taille normale, ajouter un terminateur null, puis revenir.
Maintenant, regardons GetInt.
Vous avez peut lire ceci?
Je peux zoomer un peu.
Je ne sais pas comment les ordinateurs fonctionnent.
Ce n'est rien.
Je ne peux pas faire correctement.
>> C'est vraiment dur.
Je suis désolé.
Regardons simplement à cela.
Alors qu'est-ce GetInt fait est qu'il lit d'abord dans une chaîne de GetString, qui
nous avons mis en avant.
Et le rôle important de noter ici est si ce partage qu'il finit
la lecture est comme pas réellement une chaîne, puis nous retournons juste INT_MAX à
représenter l'échec.
Pourquoi ne nous revenons INT_MAX place négatif de 1 ou 1?
Des idées?
>> PUBLIC: [inaudible] 1 négative sur un.
>> ANGELA LI: Oui, exactement.
Donc, vous êtes beaucoup plus susceptibles de vouloir juste à l'entrée 1 ou négatif de 1 lorsque vous êtes invité
pour une énième et tout Maxes nième.
C'est énorme.
Vous n'allez probablement pas à l'utiliser.
Donc, c'est comme une décision de conception à assurez-vous que vous n'avez pas accidentellement
retourner une erreur ou si vous ne retournez pas 1, qui peut être analysé
comme une réponse correcte.
Donc, si il n'existe pas de ligne, nous revenons RC-MAX.
Sinon, nous utilisons sscanf, qui est comme scanf.
Mais il lit dans une chaîne.
>> Et nous avons cette formaté chaîne, qui est% i% c.
Et nous essayons et accompagnons avec ce que l'utilisateur nous a donné.
Nous voulons que le nombre de choses appariés pour être 1, ce qui signifie que l'on ne
vraiment envie de correspondre à un nombre entier peut-être entouré de blanc
l'espace, peut-être pas.
Dans ce cas, si vous mettez quelque chose comme bar, ne correspond pas du tout,
car il faut un nombre entier au début.
Donc sscan jamais tourné 0.
Donc, vous ne revenez pas.
>> Alternativement, si vous mettez quelque chose comme 1, 2, 3, A, B, C, que l'élément correspondant
à la fois le nombre entier mais également le caractère après.
Donc sscanf sera de retour 2, qui n'est pas non plus idéal.
Vous ne voulez pas 1, 2, 3, A, B, C pour un int valide.
Alors que aussi ne fonctionne pas.
Mais dire que vous mettez dans quelque chose comme 50.
Cela correspondre au% i, ce qui signifie il obtiendra lire dans n.
Et maintenant, n contient le numéro 50.
Et puis, vous pouvez le retourner.
>> Sinon, vous frappez Retry.
Et puis il va juste encore jusqu'à ce que vous obtenez une bonne entrée de l'utilisateur.
Vous avez des questions à ce sujet?
>> PUBLIC: Donc, si vous étiez à imprimer la valeur de la GetInt sur [inaudible]
serait-il juste le nombre entier et max?
>> ANGELA LI: Oui.
Donc, si vous utilisez GetInt, vous devez supposer que vous ne voulez pas nième max de
une entrée valide, parce que vous allez à supposer que c'était mauvais.
>> PUBLIC: Si nous n'avions pas char c et quelqu'un mis en 1, 2, 3, Sam, ne serait-il
travailler encore pour 1, 2, 3?
>> ANGELA LI: Je pense que cela fonctionnerait.
Mais vous ne voulez pas 123Sam à une entrée valide par un utilisateur.
Ce n'est pas vraiment un int.
Donc, il ne semble pas juste de l'analyser comme un int.
OK.
Dans ce cas, nous allons déménager à l'Internet.
Donc HTTP n'est pas une langue.
HTTP est simplement l'ensemble des normes pour comment vous envoyez des choses des clients,
c'est vous, aux serveurs.
C'est d'autres personnes sur le web.
>> Donc HTTP signifie Hypertext Protocole de transfert.
C'est le cœur et l'âme de l'ensemble du Web.
La partie hypertexte juste se réfère à HTML.
Le transfert est comme clients vous allez envoyer des demandes de
serveurs, qui donnent des réponses.
Et le protocole est juste, comment faire vous vous attendez à un serveur de se comporter?
Et comment êtes-vous censé se comporter de telle sorte que vous pouvez rationaliser cette
processus de communication?
>> Donc requêtes HTTP ressemblent beaucoup cela.
GET est le type de demande.
Les gars, vous avez vu les requêtes GET et les requêtes POST.
Ce deuxième chose là-bas, / me, qui est juste l'URI ou l'URL de l'endroit où vous
envie d'aller dans l'hôte.
Donc, cette demande demande l' page, comme www.facebook.com / moi.
Et c'est une requête GET.
Et puis ce HTTP/1.1, qui est juste la version de HTTP que vous utilisez.
Il est presque toujours 1.1.
>> Et puis il ya un tas d'autres choses aussi.
Vous pouvez voir ces si vous ouvrir votre console lorsque vous êtes
naviguer sur le Web.
Réponses ressembler à quelque chose plus comme ça.
La partie supérieure est, à nouveau, la type de HTTP que vous utilisez
suivi d'un code d'état.
Donc 200 OK est tout a.
Voici votre contenu.
Votre contenu va suivre.
Et puis il vous dira quel genre de contenu et d'autres choses aussi.
>> Les codes d'état, il existe quelques ceux importantes que vous devez savoir.
200 OK est comme d'or de tout.
Tout fonctionne.
403 Forbidden.
Ce que vous avez probablement déjà vu si vous avez oublié chmod quelque chose de bien.
Cela signifie que vous n'avez pas les bonnes autorisations à
accéder à celui sur le serveur.
C'est comme, non, vous ne pouvez pas le voir.
404 signifie n'existe pas cette chose.
Pas trouvé.
Vous avez probablement vu que beaucoup.
>> 500 Internal Server Error est généralement comme quelque chose qui n'allait pas sur le côté
du serveur.
Ainsi, lorsque vous étiez implémentez pset7, si vous aviez des erreurs PHP, vous pourriez
effectivement aller à la page et de voir un le groupe entier de PHP erreur choses.
Mais cela ne se fait pas normalement, parce que les sites Web ne veulent pas vraiment
vous dire pourquoi leur site est cassé.
Ils vont probablement retourner une 500 Internal Server Error.
>> Et puis il ya 418 Je suis une théière.
Il ya toute une histoire pourquoi c'est une chose.
Mais vous pouvez lire à ce sujet sur votre propre temps.
Il ya tout un tas de d'autres codes d'état aussi.
Mais ce sont ceux vous devez savoir.
Donc, nous allons parler de HTML.
HTML, rappelez-vous, ce n'est pas un langage de programmation.
C'est un langage de balisage.
Cela signifie qu'il décrit contenu.
Il vous dit ce un document HTML ressemble comme ou pas à quoi il ressemble
mais comment il est structuré.
>> Ainsi, il définit une structure et sémantique de pages Web.
C'est comme, c'est un paragraphe.
Il s'agit d'une liste ordonnée.
C'est comme une partie de ma page.
Voici le titre.
Il fait des trucs comme ça.
Il ne dénomme pas tout ça, parce que c'est ce que vous faites en CSS.
Et il ressemble à une série balises de imbriqués.
Donc, pour utiliser un exemple de vraiment de base page HTML, vous avez le DOCTYPE
déclaration là-haut.
>> Cette déclaration DOCTYPE est dire, nous utilisons HTML5.
Ensuite, vous avez le tag grand HTML.
Il contient une tête et un corps.
L'intérieur de la tête, vous avez le titre.
C'est ce qui se passe dans le titre barre de votre navigateur.
Nous avons une balise de lien qui relie dans une feuille de style externe.
Et puis nous avons un script qui tire d'un JavaScript externe ainsi.
>> Et puis à l'intérieur de notre corps est fait ce qui sera affiché sur la page.
Nous avons un paragraphe, puis un image à l'intérieur de ce paragraphe.
Celui-ci est une image de chatons.
Notez que l'image tag se ferme.
Ainsi, au lieu de l'ouverture avec une image puis faire une autre / image, vous
juste avoir cette petite barre ici, qui le ferme.
Et la balise d'image a aussi cette touche attribut de valeur appelé alt.
C'est le texte de remplacement qui qui se passe lorsque vous survolez.
>> La plupart des éléments HTML ont une certaine valeur de la clé choses que vous pouvez lui donner, divers
personnalisation.
Ouais.
>> PUBLIC: [inaudible].
>> ANGELA LI: Eh bien, il est donc un attribut de la balise.
Donc, si vous utilisez jQuery, vous pourriez faire sélectionnez image.getAttribute.
Et puis vous pouvez rechercher des obtenir l'attribut alt.
Et il vous donnera des chatons.
Si vous vous souvenez formes en HTML, entrée éléments auront attributs de nom.
Et c'est ce que PHP utilise pour envoyer demandes lorsqu'un formulaire est soumis.
>> PUBLIC: Avez-vous dit quelque chose sur la façon si vous utilisez Kittens.jpg ou
quelque chose qui a disparus déposer des dossiers ou d'autres fichiers?
>> ANGELA LI: Oui.
Donc, c'est ce qu'on appelle un rapport chemin, parce que je ne suis pas renoncer
vous le chemin complet.
C'est comme quand dans C si vous faites fopen certains fichiers, si vous hi.txt fopen, que
hi.txt devrait être dans le même répertoire, sauf si vous lui donnez un plus
trajectoire complexe.
>> PUBLIC: Donc, vous pouvez spécifier le dossier qui [inaudible]?
>> ANGELA LI: Oui.
Et vous pouvez voir comment le faire.
Mais si je voulais obtenir Kittens.jpg sur du répertoire parent, je ferais
.. / Kittens.jpg.
Ouais.
Désolé.
Ouais.
Oh man, j'ai oublié la question.
Quelle était la question?
Oh, la question était de dire, Kittens.jpg devrait être dans le même répertoire?
Et dans ce cas, il est.
Mais vous pouvez aussi lui donner un certain chemin de telle sorte qu'elle n'a pas à l'être.
Bon?
>> CSS.
Donc, CSS, comme HTML, n'est pas un langage de programmation.
CSS est juste une série de règles de style.
Il est synonyme de Cascading Style Sheets.
Et vous l'utilisez en conjonction HTML des pages de style.
Donc, il ya trois façons vous pouvez l'inclure.
Une façon vous pouvez faire, il est dans la tête partie de votre code HTML, vous pouvez simplement
ouvrir une balise de style et puis coller un peu de CSS règles là.
C'est assez OK.
Ouais.
>> PUBLIC: Pourriez-vous mettre les balises de style entre les deux, nous allons
par exemple, le corps et / corps.
Et alors vous seriez style seulement dans le corps.
>> ANGELA LI: Vous pourriez.
Il va travailler.
Mais vous ne devriez pas, parce que le style est nature des métadonnées qui devrait aller en
la tête de votre document.
Corps devrait vraiment contenir que ce qui se passe réellement à
apparaître sur votre page.
>> PUBLIC: Donc, vous mettriez le style dans votre tête à coiffer l'
page Web entière, non?
>> ANGELA LI: Oui.
Donc, mettre le style ici, ces règles CSS s'appliquera à toute la page sur la base de
des sélecteurs. leurs
Donc, la meilleure façon de le faire est la place d'avoir une balise de style dans votre tête,
vous avez ce lien à un style externe feuille comme je vous ai montré dans le
exemple précédent.
Que cela ne soit elle tente et trouve l' déposer style.css puis la tire
et dans les utilisations en tant que l' styles de la page.
Et votre style.css serait il suffit de regarder comme ça.
Il serait tout simplement un tas de CSS.
>> Et enfin, il ya une autre façon, vous peuvent inclure des CSS, qui vous avez vraiment
ne devrait jamais faire.
C'est l'appel en ligne de style.
Et si n'importe quel élément HTML peuvent également prendre un attribut de style.
Et puis, dans cet attribut de style, vous pouvez lui donner des règles CSS.
Donc dans ce cas, quelle que soit div je suis définir ici, ça va
avoir un fond noir et une couleur blanc texte.
Mais vous ne devriez pas faire cela, parce que ce cela ne se fait-il met votre style
l'intérieur de votre code HTML.
>> Et je sais que nous avons parlé HTML est la structure et CSS est de style.
Si vous faites cela, il se mélange ensemble.
Et ce n'est pas très propre.
Donc, ne pas le faire.
L'aide d'un exemple de CSS, là-haut, nous il suffit de sélectionner le corps du HTML
documentaire.
Et nous sommes comme, tout est va être Comic Sans.
Je ne recommande pas non plus que.
Mais vous pourriez le faire.
>> La deuxième règle ici, ça va pour sélectionner l'élément de la
la page avec l'ID principal.
Donc, n'importe quel code HTML élément, je l'ai dit ID = Principal, je vais vous donner qu'un
Marge de 20 pixels et aligner tout, tout le moins, vers le centre.
La dernière chose que sélectionne par classe CSS.
Ainsi, tout élément de la page que j'ai donné une classe de section, je vais le faire
une couleur de fond de bleu clair.
Yep.
C'est tout ce que j'ai.
Question?
>> PUBLIC: Qu'est-ce que le hashtag avant principal faire?
>> ANGELA LI: La question est, qu'est-ce que le hashtag avant do principale?
Dans ce cas, le hachage dans CSS signifie sélectionnez par ID.
Donc, si je devais un élément HTML, comme DIVID = principales, sélectionne règle ce CSS
la chose avec ID principal.
Et de même, la période devant section est sélectionné par classe CSS ou
sélectionner par catégorie de HTML.
>> PUBLIC: Pourquoi est-il un a avant 6 dans la couleur de fond?
>> ANGELA LI: Oui.
Donc la question est, pourquoi est-il un hachage avant le 6?
Ceci est différent de ce hachage.
Cela signifie que vous donnez une couleur hexadécimal.
Donc couleurs hexagonales, ce juste représente une couleur.
Et vous vous souvenez de triplets RVB lors vous avez la criminalistique pset?
Ceci est similaire.
Les deux premiers chiffres représentent combien le rouge est la couleur.
Les deux autres représentent combien vert.
Et le troisième représente combien bleu.
Et le hachage est que cela va pour représenter une couleur.
>> Donc, à partir de quoi que ce soit 0, 0, 0, 0, 0, 0 jusqu'à F, F, F, F, F, F est valide.
C'est un peu de couleur valide qui peut être affiché par votre navigateur.
Question?
>> PUBLIC: Quelle est la différence entre en utilisant par ID et par classe?
>> ANGELA LI: La question est quelle est la différence entre
en utilisant par ID et classe?
Vous ne pouvez avoir qu'un seul élément dans un document HTML qui possède un ID donné.
Donc, une seule chose sur ma page est autorisé à avoir ID principal.
Donc, vous l'utilisez pour cela est l'en-tête.
C'est la navigation.
C'est le pied de page.
Les classes sont différentes, parce que vous pouvez appliquer classes pour autant d'éléments HTML
que vous le souhaitez.
>> Ainsi, par exemple, j'ai fait partie de la classe, car il n'y a probablement plus d'un
section sur ma page.
Vous êtes juste permis d'avoir le plus grand nombre éléments sur la page avec la même
classe mais une seule avec un certain ID.
>> PUBLIC: Donc, le point représente la classe?
>> ANGELA LI: Oui.
Un point représente une classe.
Cool.
C'est tout ce que j'ai, les gars.
Merci.
>> [Applaudissements]
>> ZAMYLA CHAN: Salut, tout le monde.
Je suis Zamyla.
Je vais être couvrant PHP, MVC et SQL aujourd'hui.
Une grande partie du matériel que je serai revêtement va être à peu près
dès la sortie de pset7.
Très bien.
Alors qu'est-ce que PHP?
PHP signifie pour PHP Hypertext Préprocesseur.
Donc il, en soi, est un récursive nom, qui est plutôt cool.
PHP est un langage de script côté serveur, et il fournit les interfaces
et les fondements logiques de notre site Web.
>> Donc, Angela a beaucoup parlé de l'HTML et CSS qui fera la structure
de ce site.
Mais que faire si vous voulez changer que contenu dynamique ou si elle varie
sur la base de l'utilisateur ou certaines conditions?
C'est là qu'intervient PHP
Maintenant, généralement, PHP peut prendre un peu moins de lignes pour mettre en œuvre la même chose
en C. C'est parce que PHP gère la mémoire gestion pour le programmeur,
plutôt que de nous avoir à malloc gratuit, des choses comme ça.
>> Mais depuis PHP est une interprétation langue, généralement, il peut exécuter
un peu plus lentement que C, qui est un langage compilé.
Parce que nous allons de l'programmation langues, regardons comment le
syntaxe sera différente.
Soyons très attention à ne pas se confondre avec ce.
Donc, avec la syntaxe de PHP, si vous êtes l'intégration de votre PHP intérieur d'un HTML
fichier ou dans un fichier php. elle-même, vous besoin de joindre le code à l'air libre
PHP et les balises PHP fermées comme suit, comme sur l'écran.
>> Les variables en PHP.
Chaque variable commencera par le signe $ suivi du nom de
votre variable.
Maintenant, les variables en PHP sont faiblement typés, ce qui signifie que vous n'avez pas besoin
pour indiquer que le type de données c'est quand vous déclarer.
Toutefois, cela ne veut pas dire qu'ils n'ont pas de types à tous.
Donc, si je déclare une variable et viens de mettre en il égal à 1, et alors je déclare
une autre variable, réglez égal à "1" et puis un autre 1.0, ainsi,
en fonction du type de l'égalité opérateurs que j'utilise, si je veux comparer
pour tous les types, puis ils seront égaux.
Mais si je veux m'assurer que le types sont égaux, PHP peut encore faire
que, même si nous n'indiquons pas quel type il s'agit lorsque nous
faire d'abord le fichier.
>> Maintenant, en PHP, même si nous sommes commutation de la programmation
langues à partir de C, nous avons encore notre fidèle si l'état, juste comme ça.
Nous avons encore nos boucles while, juste comme ça, où vous mettez dans votre
état et la corps de la boucle.
Et puis nous avons aussi notre boucle, qui ressemble habituellement à ceci.
Donc, si je voulais parcourir tous neuf psets et présenter et appeler un
fonction submitPset, alors je peux le faire ici, qui ont tous vous les gars
fait par ce point.
Félicitations, par la manière.
>> Pour l'appareil photo, les gens dit, je vous remercie.
Maintenant, si vous ne voulez pas l'utiliser simplement pour la boucle, alors PHP fait également
a appelé les choses boucles foreach.
Donc, si j'avais un tableau d'entiers, 0 à 8, stockée dans les psets de matrice,
alors je pourrais avoir une boucle foreach qui parcourt chaque numéro psets.
Et puis je pourrais appeler la même fonctionner huit fois,
comme je le faisais avant.
Donc pour chaque boucle est agréable, car vous n'avez pas à si vous ne savez pas
la longueur exacte de la matrice que vous ont, puis en utilisant cette boucle foreach
prendra soin de cela pour vous.
>> J'ai donc fait psets comme un tableau.
Voyons cela.
Les tableaux en PHP sont généralement les mêmes que celles que nous avons eues en C, où
vous pouvez déclarer un tableau.
Et ici, je peux déclarer un tableau vide puis construire dynamiquement à l'aide
indices que les entiers.
Ainsi l'indice 0, je vais stocker un entier nommé 1.
À l'index 1 de ma liste, je vais pour mémoriser la valeur 2.
Et à la troisième mais l'indice deuxième numéro, je vais
enregistrer le numéro 12.
>> Maintenant, c'est bien dans ce fonctionne, il fonctionne bien.
Mais dire qu'il est important pour moi ce que chaque indice détient.
Pour moi, l'indice 0 signifie combien nombreux chats j'ai.
Et l'indice 1 signifie combien de nombreux hiboux j'ai.
Et la suivante des moyens de combien de chiens.
Eh bien, alors il de préciser que, au lieu d'avoir à mémoriser 0 correspond à
chats et 1 à hiboux, je peux utiliser tableaux associatifs, ce qui signifie que
au lieu de nombres entiers comme mes indices, Je peux effectivement utiliser des chaînes.
>> Donc, c'est très utile.
Et vous avez fondamentalement juste remplacé les nombres entiers avec des cordes.
Et là, vous avez une tableau associatif.
Ouais.
>> PUBLIC: Y at-il une raison pour laquelle il ya un trait de soulignement pour la deuxième
partie, parce que ma liste est de la baie.
>> ZAMYLA CHAN: La question était, est il une raison pour laquelle il ya une
souligner entre ma liste et?
Non.
C'est juste la façon dont je nommer ma variable.
>> PUBLIC: Sur la première ligne, c'est un mot.
>> ZAMYLA CHAN: Mes excuses.
Je vais arranger ça.
Ouais.
Ils doivent être le même nom de variable.
Bonne prise.
OK.
Passons donc à chaîne concaténation.
Si je voulais prendre deux chaînes, alors je peux les concaténer
avec l'opérateur point.
Donc, si j'ai Milo comme un prénom et Banana comme un nom, puis
concaténation avec l'opérateur point et puis de mettre un espace entre les deux
fera une chaîne qui contient Milo Banana, que je peux ensuite écho ou,
plutôt imprimer.
>> Parlant de l'écho, nous allons parler sur un peu utile -
oops.
Je suis désolé.
Quelques fonctions PHP utiles.
Nous avons donc la -
difficultés techniques.
Une seconde.
Je l'ai envoyé.
problèmes de PowerPoint.
Et nous sommes de retour avec des fonctions PHP.
>> Nous avons donc la fonction exiger, le cas si vous passez dans un fichier, voici tout juste
un exemple d'un fichier qui Je pourrais passer po
Alors que comprendra le code PHP partir de ce fichier que j'indique.
Et il va évaluer que po
Ensuite, nous avons aussi écho, qui est un parallèle à printf.
Sortie est un parallèle à briser, qui quitte le bloc de
code que vous êtes po
Et puis des contrôles vides si une donnée variable est comme nulle ou zéro ou
quelle que soit est assimilée à être vide.
Ouais.
>> PUBLIC: Pour la concaténation de chaîne une dot opérateur, en PHP, est que l'
même que dans JavaScript où il est à l'aide le point de concaténation signifie en plus?
Donc, pour le nom complet, vous pourriez avoir dollar signer le premier + puis + durer?
>> ZAMYLA CHAN: Ouais.
Donc la question est de savoir si nous en PHP peuvent utiliser la même concaténation
comme en JavaScript avec les points positifs.
Et Joseph entrerons dans plus tard.
Je pense qu'il a une diapositive à ce sujet.
En fait, c'est différent.
Donc, en JavaScript, vous devez utiliser le plus pour concaténer des chaînes.
Et en PHP, vous devez utiliser l'opérateur point.
Donc, ils sont différents.
>> OK.
Alors, maintenant que nous avons couvert tous cette PHP, où le fait
vraiment être utile?
Eh bien, il est très pratique quand on peuvent se combiner avec notre HTML.
Donc, notre PHP va nous donner le pouvoir de modifier le contenu HTML d'une page avant
son chargement.
Ainsi, sur la base de conditions différentes, généralement à l'utilisateur spécifique qui est
connecté, nous pouvons afficher des informations différentes.
Linda, avez-vous une question?
>> PUBLIC: Pouvez-vous concaténer également un nombre entier?
>> ZAMYLA CHAN: Oui, vous le pouvez.
Donc, la question était de savoir si vous pouvez concaténer des nombres entiers ou d'autres
variable.s maintenant, nous passons à MVC, qui est un paradigme que nous avons utilisé dans
pset7 et beaucoup de concepteurs de sites Web utilisent pour l'organisation de ce code dans les fichiers
dans leur site Web.
M est pour le modèle.
Et fondamentalement, les fichiers de modèle traiteront avec les interactions avec la base de données.
Afficher les fichiers, ils se rapportent à la esthétique du site.
Et les poignées de contrôleur demandes des utilisateurs, analyse
données, fait une autre logique.
>> En pset7, nous avons combiné le modèle et le contrôleur.
Et nous les avons juste appelé les contrôleurs et les mettre dans le répertoire public.
Et les fichiers de vue, nous les utilisons comme modèles dans le répertoire des modèles.
Donc, ce diagramme représente ici aussi le même genre de division avec le
modèle et le contrôleur en violet ici, sur la gauche et
la vue sur la droite.
C'est donc un schéma que certains d'entre vous peut-être vu à des heures de bureau ou
diagrammes que nous tirons comme vous ont été trouver vos pset.
>> Donc, ici, dans un contrôleur donné, un modèle contrôleur, nous avons des fonctions
qui se rapportent à l'interrogation SQL base de données, l'exécution de la logique de PHP.
Peut-être que vous souhaitez consulter un stock de Yahoo!
Finances.
Ou peut-être, vous voulez bien vérifier voir si un utilisateur avait présenté une
former déjà avant d'avoir visité votre page.
Et alors vous rendre Un formulaire ici.
Après que la forme avait été soumis par l'utilisateur, l'action qui était
spécifiée dans la balise HTML de la forme indiquerait la page qu'il
renvoie que des données.
>> Donc, toute cette information serait renvoyé à votre contrôleur.
Ensuite, vous auriez probablement faire un peu plus logique sur cette question et peut-être exécuter quelques-uns
plus de recherches dans la base de données SQL et puis, enfin, arriver à un bien
ensemble emballé d'informations que vous le feriez passer dans un autre modèle
ce que l'information affichée.
Maintenant, comment pouvons-nous emballons fait que des informations?
Eh bien, nous avons une fonction appelée Render qui était dans le fichier functions.php dans
pset7, où vous passez le nom de un fichier, le nom du modèle.
>> Et puis vous passez aussi un tableau associatif.
Et pour que tableau associatif représente l'information différente
que vous voulez passer po
Maintenant, qu'est-ce qui va être constante dans ces exemples est que les touches ou,
plutôt, les clés de la associative tableaux, ce sont ce qui va être
devrait être constante par le modèle, parce qu'il sait qu'il a besoin
quelque chose qui s'appelle un message ou appelé nom.
Et puis les choses sur le droit, la valeurs réelles, dans ce cas, qui est
un bon garçon et Milo, ceux qui vont comme les valeurs qui changent
que le contrôleur change à chaque fois ou à base d'une certaine condition, et
passera que po
>> Donc, ici dans les modèles, nous voyons que nous utilisent les caractères spéciaux HTML,
ce qui signifie en fait juste que nous voulons pour obtenir la chaîne par les pairs que l'
utilisateur mis po
Et nous voulons substituer un message là-dedans.
Alors quand nous considérons effectivement le fichier, le spécifique
l'information est transmise po
Notez que la clé comment rendre les œuvres est que les clefs de la associative
tableaux, les variables se noms ici.
Et si les valeurs de cette clé dans la tableau associatif devient alors l'
La valeur de la variable.
>> Maintenant, passons à SQL.
Il représente structuré Query Language.
Et si c'est juste une programmation langage conçu
pour la gestion de bases de données.
Et il est bien pratique pour nous notre site Web pour le financement du pset7.
Essentiellement, c'est juste un moyen facile de suivre et gérer les objets et les tables
et de les relier les uns aux autres.
Maintenant, pensez à votre base de données SQL essentiellement sous forme de fichier Excel, peut-être,
avec plusieurs feuilles à onglets.
>> Ainsi, vous pouvez avoir plusieurs tables, peut-être que liée à une autre.
Et tout comme Excel, nous avons un grand nombre de la fonctionnalité que nous voulons.
Par exemple, nous pouvons choisir certaines lignes.
Nous pouvons insérer des informations.
Nous pouvons mettre à jour les lignes.
Et nous pouvons également supprimer les choses.
>> Le SQL sélectionner des œuvres de la sélection de lignes ou une rangée de colonnes spécifiées d'un
base de données qui correspondent à un certain critères que vous indiquez.
Donc, ici, quand je vois select * from Assistants où la maison = Serdaigle, puis
Je sélectionne *, qui signifie que je suis la sélection de chaque colonne unique en ce que
ligne de la table des assistants, mais seulement si la colonne de la maison équivaut à Serdaigle.
Maintenant, ce qui est pur ou SQL.
Donc, si je suis allé dans phpMyAdmin, qui est la manière spécifique que nous utilisons pour gérer
nos bases de données SQL, puis j'ai pu insérer que dans le site Web de phpMyAdmin.
Et ce serait exécuter.
>> Mais nous voulons réellement faire que sur le côté de PHP.
Alors, comment faisons-nous cela?
Eh bien, nous utilisons la fonction de requête, qui essentiellement exécute cette requête SQL.
Utilisation?
comme un espace réservé, nous pouvons passer dans certains valeurs à notre chaîne qui nous
vouloir remplacer.
Alors peut-être que je suis le stockage différente les valeurs dans la curr_house, qui
représente la maison actuelle que je vais à travers.
Donc je ne peux passer que dans un espace réservé avec le point d'interrogation.
Et puis je vais essentiellement exécuter les même chose que je faisais avant, sauf
maintenant, je suis en PHP.
>> Et requête va renvoyer un tableau associatif.
Et je vais le stocker dans les rangées.
Maintenant, la requête peut toujours échouer.
Peut-être la requête SQL n'a pas pu exécuter parce que la table n'existait pas.
Ou peut-être, la colonne n'existe pas.
Quelque chose s'est mal passé.
Eh bien, dans ce cas, vous aurez envie de faire vous que vous vérifiez si le
requête a retourné false.
Et c'est en utilisant le triple égaux opération il.
>> Et puis, je m'excuse, ce qui est un autre fonction CS50, en passant un message.
Et si vous regardez dans s'excuser, tout ce qu'il vraiment fait est rendu apology.php.
Ouais.
>> PUBLIC: Pourriez-vous expliquer ce que étoiles fait entre sélection et de?
>> ZAMYLA CHAN: Oui, absolument.
Donc l'étoile entre sélection et de signifie que je veux sélectionner l'ensemble
toute la ligne de ma table.
J'aurais pu indiquée sélectionnez nom, l'année, la maison.
Et je ne voudrais obtenir ces trois colonnes de ma table.
Mais si je dis select *, alors je vais que tout rentre dans cette colonne.
Alors je vais vous aller à l'arrière d'abord.
>> PUBLIC: Donc, c'est encore dans SQL, non?
Est-ce la requête ou est-ce que PHP?
>> ZAMYLA CHAN: Nous sommes dans une requête.
C'est donc en PHP.
Donc, en utilisant la fonction PHP requête, nous l'exécution d'une requête SQL.
>> PUBLIC: Est-il rien dans SQL sensible à la casse, comme sélectionnez
ou d'assistants ou de maison?
>> ZAMYLA CHAN: Est-il rien dans SQL sensible à la casse?
Je le crois, oui.
Je crois que SELECT et FROM Et où sont sensibles à la casse.
Non?
>> ROB BOWDEN: Donc, c'est le contraire.
Les noms de colonnes et les moyens de table, tous ceux qui sont sensibles à la casse.
Mais l'un des mots clés de MySQL, comme SELECT, FROM et WHERE, ce ne sont pas
sensible à la casse.
OK.
Donc le contraire de ce que j'ai dit.
Donc, tous les mots clés MySQL -
sélectionner, à partir, où - ceux ne sont pas sensibles à la casse.
Mais tout le reste est.
OK.
Vous à l'avant.
>> PUBLIC: Si j'ai $ lignes en termes de plus d'une ligne, que ça veut dire est
devient tout simplement un tableau associatif?
>> ZAMYLA CHAN: Donc la question était de savoir si les lignes a plus d'une ligne en elle, ne
il devient un tableau associatif?
Il est donc un tableau associatif de tableaux déjà.
Donc, même si il ya une seule ligne retourné, alors vous devez aller à
indice 0 de ce résultat.
Et alors, vous auriez la première rangée.
Oui, Belinda?
>> PUBLIC: Lorsque vous utilisez ===, est-ce le seul exemple?
Ou y at-il d'autres?
>> ZAMYLA CHAN: Donc dans ce cas, === est une comparaison entre les différents types.
Désolé. === Est une comparaison qui compare les types.
Et puis == compare pour tous les types.
>> PUBLIC: Pouvez-vous expliquer ce que lignes est dans cette situation?
Est-ce la rangée de données?
>> ZAMYLA CHAN: Dans la diapositive suivante, je suis vais vous expliquer ce qui est des lignes.
Donc, si cela ne vous dérange pas tenue de rabais sur cela.
Et puis vous dans le dos?
>> PUBLIC: Pour les fonctions comme requête, rendre et présenter des excuses [inaudible]?
>> ZAMYLA CHAN: La question était de savoir si ces fonctions - requête, présenter des excuses,
et rendre -
sont communs à PHP.
Ce sont ceux qui CS50 écrit pour pset7.
Et Jay?
>> PUBLIC: Lorsque vous avez besoin de dire $ _SESSION, C'est que seulement pour les ID?
Ou pourriez-vous avez dit que ici?
>> ZAMYLA CHAN: La question était donc, quand nous utilisons $ _SESSION, c'était un spécifique
variable globale que nous utilisons.
Voici cette variable va être locale à notre fonction.
Donc, nous sommes en train de déclarer une nouvelle variable.
>> PUBLIC: Comment est s'excuser mis en œuvre?
>> ZAMYLA CHAN: La question était, comment est s'excuser mis en œuvre?
Et je pense que c'est effectivement une jolie bonne pratique pour vous les gars pour aller en
la section functions.php et regarder excuses et de voir comment vous pourriez avoir
fait vous-même.
Donc, je peux laisser cela à vous, mais juste Je dis que si vous regardez des excuses,
alors il prend le message que vous soumis à des excuses, puis il
rend ce message.
D'autres questions?
J'adore les questions.
Afin de les garder à venir.
>> PUBLIC: [inaudible]
echo ou print il?
>> ZAMYLA CHAN: La question était, pourrions-nous pas juste avons mis
echo ou print il.
Alors que cela aurait fait quelque chose légèrement différente.
Cela aurait imprimé requête échoué en ce que -
bien, en ce moment, nous sommes en fait dans notre contrôleur.
Donc, nous n'avons pas réellement avons HTML mis en place ici.
Apologize en rendant apologize.php vous redirige en fait à apology.php.
OK.
>> Alors maintenant, passons à répondre à la question de tout à l'heure ce que
est vraiment lignes.
Eh bien, la requête retourne un ensemble de rangées.
Et chaque ligne est représentée par un tableau associatif.
Donc, si j'ai exécuté une certaine requête SQL et J'ai stocké le résultat dans les lignes, puis
en utilisant une boucle foreach, le tableau nom est le premier sur les lieux - les lignes.
Et puis je vais appeler chaque ligne il $ row.
>> Alors que l'itération sur, je peux alors accéder nom de colonne de la ligne donnée,
colonne de l'année, et la colonne de la maison.
Attention, je n'aurais pas été en mesure de faire avec les lignes, parce indice des lignes
nom n'existe pas.
Lignes est tout simplement un ensemble de tableaux associatifs.
Donc, vous avez deux niveaux là.
Une fois que vous avez le tableau de lignes, vous devez entrer dans ce.
Et puis vous pouvez accéder aux colonnes.
Cela at-il clair?
Ouais, en face?
>> PUBLIC: [inaudible] ouvrir supports pour [inaudible]?
>> ZAMYLA CHAN: Pardon?
>> PUBLIC: Les supports ouverts.
>> ZAMYLA CHAN: Ces ici?
Ça me permettre d'inclure cette variable.
Ouais.
>> PUBLIC: Lorsque vous imprimez, vous êtes l'impression sur le code HTML?
>> ZAMYLA CHAN: Oui.
Lorsque j'imprime, ce ici est à l'intérieur mon modèle maintenant
mon point de vue de la méthode MVC.
Je suis donc l'impression dans le code HTML.
>> PUBLIC: Donc, si nous sommes allés dans développeur outils après l'exécution de cela, nous avons pu
qui en fait en code?
>> ZAMYLA CHAN: C'est un grand question, oui.
Donc, si vous êtes allé dans les outils de développement dans Firefox en utilisant Firebug ou
Chrome, alors oui, vous pourriez Voir le code HTML spécifique.
Donc, il ne serait pas montrer $ row ["nom"].
Cela montrerait selon nom est dans cette ligne.
>> PUBLIC: Juste une question d'ordre général, ce sont tr et td défini comme?
Pourquoi devrions-nous [inaudible]?
>> ZAMYLA CHAN: Ligne de table tr, table, alors td colonne.
OK.
>> PUBLIC: Ouais, c'est des données de table.
>> ZAMYLA CHAN: Les données de table.
Ouais.
>> PUBLIC: C'est une ligne dont la ligne est traitée comme une colonne?
>> ZAMYLA CHAN: Désolé.
Pouvez-vous répéter?
>> PUBLIC: Comment feriez-vous visualiser les lignes?
>> ZAMYLA CHAN: Comment voulez-vous visualiser rangées dans quel genre de façon?
Parlez-vous de ces lignes ici ou les lignes de tr?
>> PUBLIC: Les lignes.
>> ZAMYLA CHAN: Ces lignes ici?
Je visualise ce que J'exécute ma requête.
Et il dit, OK, je dois soit 0 à n nombre de lignes qui correspondent aux critères
que vous aviez demandées.
J'ai donc un nombre de lignes.
Ainsi rangées, les rangées de magasins, chacun $ l'une de ces lignes dans un tableau.
Donc, même si c'est juste l'un d'eux, il est encore un réseau de lignes qui correspondent.
>> Ainsi donc, par exemple, il s'agit d' comme lorsque vous les cheveux
le cache des utilisateurs.
Et les critères, il était où ID est égal à l'identifiant de session.
Il est vraiment seulement une rangée qui pourrait correspondre à cela.
Mais encore rangées venons une rangée.
Vous aurez donc à aller à des lignes, indice 0, index cache
effectivement accéder à votre cache.
>> PUBLIC: Est la fonction d'impression en écho à la même chose?
>> ZAMYLA CHAN: Oui.
Oui.
Imprimer un écho de la même.
>> PUBLIC: Est ce que le boucle foreach l' seul moyen de l'indice en lignes?
>> ZAMYLA CHAN: Est une boucle foreach la seule façon que vous pouvez
itérer les lignes?
Non.
Vous pouvez également utiliser une boucle for, à condition que vous connaissez la longueur
de l'ensemble de la ligne.
>> PUBLIC: Pourriez-vous y accéder en utilisant une ligne comme [inaudible]?
>> ZAMYLA CHAN: Donc, vous ne pouvez pas y accéder simplement en utilisant la ligne si vous n'avez pas un
boucle foreach condition que vous n'avez pas déclaré rangée.
Oui.
Oui, dans le blanc.
>> PUBLIC: Alors qu'est-ce tr et td font?
>> ZAMYLA CHAN: Donc tr et td sont des balises HTML.
tr indique le début d'une ligne de la table.
Et chaque td indique une nouvelle colonne de données de table.
>> PUBLIC: Pour un visuel de ce affilée est comme, imaginez le SQL, comment
ils ont une ligne.
[Inaudible].
>> ZAMYLA CHAN: Ouais.
C'est un excellent point.
Vous pouvez visualiser les lignes comme juste comme dans un tableau Excel, juste
la liste des rangées.
OK.
Très bien.
Alors, maintenant que nous avons dépassé de sélection, si il n'y a pas d'autres questions, nous allons
aller sur sur insert.
Donc, si je voulais insérer dans une certaine table et insérer certaine colonne
valeurs, je ne pouvais me insérer à Serdaigle dans l'année 7.
Mais parfois, il peut y avoir double valeurs, comme nous l'avons vu dans pset7 lorsque nous
ont été la mise à jour de notre portefeuille.
>> Donc dans ce cas, nous voulons utiliser ON DUPLICATE KEY UPDATE, de sorte que nous ne faisons pas
stocker plusieurs lignes avec le même valeur mais plutôt le mettre à jour.
Ensuite, nous avons fait la mise à jour, qui n'est pas un insert.
C'est juste une mise à jour où vous mettez à jour dans une certaine table avec une donnée
critères et puis, enfin, supprimer, qui fait une chose très similaire.
>> PUBLIC: Pourriez-vous brièvement aller sur le double de la clé?
>> ZAMYLA CHAN: Ouais.
Essentiellement ici, j'ai INSERT INTO gringotts, est, galions, ces valeurs.
Mais ID, sans doute, est une clé unique valeur mis en place en table MySQL.
Donc, si j'ai déjà cet ID mettre en place, alors je ne peux pas insérer une nouvelle ligne.
Donc, si elle n'existe pas déjà, alors je dois mettre à jour.
Au milieu dans le blanc.
>> PUBLIC: Donc insérer, modifier, supprimer, et sélectionnez, tous sont ceux disponibles
localement [inaudible]?
>> ZAMYLA CHAN: Donc, insérer, mise à jour, supprimer et
sélectionnez sont toutes les requêtes SQL.
Donc, lorsque vous utilisez SQL, vous avez ceux qui sont disponibles.
>> PUBLIC: Retour au quiz dernières -
il y avait une question qui portait sur si vous aviez une table et je voulais
insérer les résultats des tests dans un seul et vous insérez votre nom afin qu'il ne vous laissera pas
[Inaudible] score au test de votre ami.
Comment feriez-vous avec insert?
>> ZAMYLA CHAN: Donc, la question était de savoir une question précédente à mi-parcours.
Je ne suis pas au courant de ce qui c'est un moment.
Alors peut-être plus tard, si vous voulez venir et me montrer, alors je peux
certainement vous donner des conseils.
Mais en parlant de choses insertion, comme prenant le score de quelqu'un quand vous
ne devrait pas, nous allons parler de Attaques par injection SQL.
Ainsi, une attaque par injection SQL est essentiellement où quelqu'un prend
avantage de la faible sécurité de l' manière que vous prenez dans les données.
>> Donc, ici, tout comme dans le financement du CS50, quand on identifié, nous pouvons entrer dans une
username dans le formulaire de connexion, la première zone de texte, et
puis entrez un mot de passe.
Peut-être notre code PHP pourrait ressembler quelque chose comme ça, où $ username
est le nom d'utilisateur de données post et mot de passe est le mot de passe de données post.
Et ensuite nous exécutons notre requête, par exemple, OK, bien, notre requête va
choisir parmi nos utilisateurs, où le nom d'utilisateur est l'
celui qu'ils ont présenté.
Et le mot de passe est le mot de passe, ce qui signifie que les mots de passe correspondent.
>> Maintenant, si au lieu de réellement soumettre un mot de passe réel, comme
12345 et deviner broche qui dit mot de passe et d'essayer de pirater leur
compte, si la place ils ont présenté ce.
Ils pourraient peut-être entrer dans de deviner un mot de passe.
Et puis ils terminer la devis puis tapez ou 1 = 1.
Ce serait le rythme directement dans le SQL interroger à ressembler à quelque chose comme ça.
Choisissez parmi les utilisateurs où le nom d'utilisateur = dents et mot de passe
égaux lis ou 1 = 1.
>> Donc, soit le mot de passe a correctes ou 1 = 1,
ce qui est toujours vrai.
Donc dans ce cas, essentiellement, un utilisateur peut profiter de cette et connectez-vous
eux-mêmes et piratage le compte de quelqu'un.
C'est pour cela que nous voulons éviter personne ayant à faire.
Mais heureusement, la fonction de requête par passant dans les espaces réservés prendra
soin de cela pour vous.
En outre, vous aurez généralement ne voulez jamais à soumettre effectivement les mots de passe
eux-mêmes.
C'est pourquoi nous haché ou chiffré les dans le financement du CS50.
>> AUDIENCE: Le quiz passé parlé À propos de MySQL chaînes d'échappement.
Faut-il s'en inquiéter?
>> ZAMYLA CHAN: C'est une bonne question.
Les chaînes d'échappement MySQL est certainement un la fonction qui a été utilisé dans la requête.
Mais certainement examiner la question.
Je dirais que c'est un jeu équitable savoir que vous auriez besoin d'appeler cette
fonctionner sur une chaîne.
Ouais, Belinda?
>> PUBLIC: Comment savez-vous quand il est guillemets simples ou doubles?
Et aussi, je me sens comme en conférence vous mentionné quelque chose de ne pas avoir
la [inaudible] ou quelque chose ou l' deuxième apostrophe à la fin.
Je pense qu'il l'a souligné dans la conférence que vous êtes censé avoir apostrophe 1
et puis ne pas avoir apostrophes ou quelque chose.
>> PUBLIC: [inaudible].
>> PUBLIC: La chose est le dernier single citation dans là, dans cette deuxième zone
ne devrait pas être là.
[Inaudible]
Parce que quand vous prenez cette dernière unique citer hors et correspondre à ces derniers pour le contenu
où le mot de passe est, si vous avez ce requête, il ya une seule offre à
la fin déjà.
Vous souhaitez utiliser cette apostrophe comme celle qui fait face à la une
[Inaudible].
Alors, quel est réellement dans ce texte boîte ne devrait pas avoir.
>> ZAMYLA CHAN: Je vais changer cette situation.
OK.
S'il n'y a pas de questions, alors je vais passer la parole à Joseph de parler
sur JavaScript, etc.
>> [Applaudissements]
>> JOSEPH ONG: nous sommes donc en cours d'exécution un peu de retard.
Donc, si vous devez partir, c'est OK.
Mais nous vous demandons de garder la tête baissée si vous êtes dans le milieu, de sorte que vous
ne pas bloquer l'appareil et que vous utilisez la sortie de l'arrière si vous devez.
Je suis Joseph par la manière.
Salut.
Test, test.
Dan, est-ce bon?
Cool.
>> Ainsi, la vidéo sera également affiché en ligne pour ceux qui
avoir à quitter l'entreprise.
Awkward.
OK.
Donc avis quiz.
C'est un chat.
Maintenant, JavaScript, ce qui est peut-être pas comme aww pour certains d'entre vous les gars.
OK.
C'est donc d'abord, rappelons de Zamyla.
Rappelez-vous que PHP est s'exécuter sur le serveur.
Et beaucoup de temps, vous les gars écrit boucles en PHP pour imprimer HTML, non?
Donc, une fois que le code s'exécute, que sortie HTML que vous imprimez
est envoyé à l'utilisateur.
Et une fois que cela arrive, pas plus PHP peut être exécuté, à moins que vous rechargez la page, de
Bien sûr, qui reexecutes le PHP.
Mais une fois que vous imprimez que HTML, vous ne pouvez pas aller n'importe où.
>> Alors que HTML est envoyée vers l'utilisateur, qui est le navigateur par ici, où
Milo utilise l'ordinateur.
Et bien, il ya plusieurs choses une fois que nous envoyons HTML à l'utilisateur.
Parfois, nous voulons faire quelque chose comme lorsque vous cliquez sur quelque chose, nous voulons
boîtes d'alerte à surgir, ces sortes de interactions, comme lorsque vous appuyez sur le
clé, lorsque vous cliquez sur quelque chose sur le la page, je veux quelque chose se passe.
Eh bien, vous ne pouvez pas réexécuter PHP code une fois que le HTML est activé.
Alors, comment faites-vous cela?
>> Nous introduisons un nouveau langage, JavaScript qui s'exécute dans le navigateur
qui vous permet de faire des choses HTML après que vous recevez
eux à partir du serveur.
Et c'est pourquoi nous l'appelons un côté client langage de programmation.
Il fonctionne sur votre ordinateur -
le client.
Vous avez des questions à ce sujet jusqu'à présent?
Ce paradigme fait sens pour les gens?
OK.
Bon.
Très bien.
Donc la première chose à noter est JavaScript n'est pas PHP.
>> Ils ont une syntaxe différente, que nous allons passer à.
Et ils ont des usages très différents.
JavaScript, encore une fois, pour votre navigateur, pour le client.
Server s'exécute quelque part sur quelqu'un d'autre de l'ordinateur qui envoie des informations
à vous, corriger?
Donc, si nous vous demandons d'écrire du code PHP sur une question d'examen, ne pas écrire
JavaScript et vice versa.
Vous venez de perdre des points, et il ne sera pas bon.
>> Donc, nous allons entrer dans une certaine syntaxe différences -
JavaScript sur la gauche et PHP sur la droite.
La première chose que vous remarquerez avec JavaScript, nous déclarons les variables avec
le mot-clé var -
V-A-R. PHP utilisé le symbole du dollar, comme Zamyla discuté plus tôt.
Si vous voulez déclarer une associatif tableau, nous voyons la syntaxe familière sur
le côté droit avec PHP.
Sur le côté gauche, au lieu vous utilisez des accolades.
Et puis vos clés sont sur la gauche.
Ensuite, vous avez un colon.
Et puis vous avez les valeurs que vous voulez.
>> Donc, c'est la façon dont vous le feriez en PHP sur le côté droit de cette seconde
ligne qui commence à Milo.
Et c'est ainsi que vous le feriez sur le côté gauche en JavaScript si vous voulez
ce que nous appelons un objet.
Et objets JavaScript sont seulement des tableaux associatifs.
Donc, si vous souhaitez accéder aux champs, dans PHP vous utilisez cette syntaxe de support.
Et de cette façon, vous pouvez réaffecter ce propriétaire domaine de Lauren.
>> Eh bien, en JavaScript, si l'on veut à accéder à un champ et de les modifier, vous pouvez
utiliser la syntaxe à point.
Vous pouvez également utiliser la syntaxe de support.
Mais vous ne pouvez pas utiliser la point syntaxe PHP.
Cela ne marchera pas.
Il fonctionne uniquement en PHP.
Et enfin, pour imprimer des choses à l' console, vous utilisez console.log, qui
vous les gars utilisent beaucoup dans pset8.
Vous pouvez CONSOLE.LOG que.
>> Si vous souhaitez imprimer un tableau dans PHP, vous devez utiliser l'impression r.
Et sur le côté droit, vous voyez i hachage concaténation là-bas.
Quelqu'un a demandé plus tôt.
J'utilise un plus dans JavaScript.
Si je veux quelque chose de concaténer en PHP, j'utilise le point.
Elles sont différentes.
Si vous écrivez du code PHP, ne pas utiliser un plus.
Si vous écrivez JavaScript code, ne pas écrire d'un point.
Il aura tort.
Et vous serez triste.
>> Donc, les différences de syntaxe.
Apprenez à connaître votre syntaxe, parce que si vous avez à écrire une question et que vous utilisez la syntaxe
de la mauvaise langue, cela ne fonctionnera pas.
Et ce sera mauvais.
Alors parlons un certain contrôle s'écouler différences, comment vous utilisez
des boucles dans chacun d'eux.
Zamyla allé sur le côté droit.
Substance sur le côté droit devrait être familier.
Regardons du côté gauche.
>> Lorsque vous utilisez pour n boucle en JavaScript, votre variable de boucle, var i là-bas,
boucle sur les clés du tableau.
Donc, vous voyez le nom, maison, et le rôle.
Si je CONSOLE.LOG i, je reçois nom, maison, et le rôle.
Ce sont les clés.
En JavaScript, une boucle foreach va sur les valeurs de ce tableau.
Ainsi, vous remarquerez qu'ils sont tous les deux i.
Mais ici sur le côté de PHP, il affiche à Milo, CS50, et mascotte.
Ce sont les valeurs en PHP.
>> Il s'agit donc de la façon dont ces deux sont différents dans les différentes langues.
Donc, si vous utilisez un foreach boucle, ne présumez pas qu'il
vous donne les clés.
Et si vous utilisez un pour n boucle, ne pas suppose qu'il vous donne les valeurs.
Cela fait-il sens si loin?
La diapositive suivante va vous montrer comment vous pouvez accéder à l'inverse en
chacun d'entre eux.
>> Eh bien, si vous avez la clé en JavaScript et vous voulez que la valeur à,
vous indexez juste dans le tableau avec qui.
Alors Milo de i vous obtenir ce que vous voulez - les valeurs.
Il ya cette autre syntaxe PHP.
Si vous voulez vraiment savoir, je ne sais pas pensons encore que nous avons montré à vous.
Mais si vous êtes intéressé, vous pouvez utiliser cette syntaxe supplémentaire sur la droite
côté qui seront effectivement vous permettre d'obtenir le clés en PHP quand vous utilisez un
boucle foreach.
Donc un peu de trivia si vous êtes intéressé.
>> Donc, c'est juste pour montrer la les différences entre ces deux boucles.
Ne les mélangez pas lorsque vous êtes la programmation d'une question.
Vous avez des questions à ce sujet.
Cool.
Très bien.
Objets JavaScript.
J'ai parlé à leur sujet.
Ils sont comme des tableaux associatifs.
La seule chose que je voudrais vous faire remarquer ici, c'est que une valeur dans un tableau associatif
tableau peut être n'importe quoi en JavaScript.
>> Il peut même être une fonction, comme là-bas.
J'ai une fonction qui est une valeur d'une clé.
Et si je veux appeler cette fonction, Je viens accéder écorce.
Et puis j'ai mis entre parenthèses après cela.
Et cela fonctionne.
Donc, des questions?
Non?
OK.
Bon.
JavaScript, comme PHP, est faiblement typé.
Qu'est-ce que ça veut dire?
>> Il possède types.
Mais lorsque vous déclarez un JavaScript variable, vous dites var i.
Vous ne le dites pas.
Ce n'est pas une chose.
Vous venez de dire que c'est une variable.
Et puis le JavaScript se chargera de la types sous le capot pour vous.
Nous pouvons convertir librement entre types cause de cela.
Donc, je commence comme un certain nombre dans ce cas.
Et puis j'ai une chaîne.
Et j'ajoute i lui.
Et je réaffecter le remettre en i.
>> Donc, sur cette première ligne, i est le nombre.
Sur la deuxième ligne, i devient maintenant une chaîne après je fais la réaffectation.
Et ici, je suis juste la concaténation ce nombre sur la chaîne.
Donc, vous voyez que même si j'étais un entier dans la première partie, c'est en quelque sorte
comme être converti en un chaîne, puis est ajoutée
sur cette chaîne de bonjour.
Et c'est ce que je veux dire par le typage faible.
C'est que vous convertissez entre types très facilement.
Et il ne jette pas les avertissements à vous aimez C fait.
>> Donc i contient maintenant bonjour 123 à la chaîne.
Suivant.
Nous pouvons également comparer librement entre types.
Donc, si vous venez d'utiliser ==, beaucoup comme en PHP, JavaScript
fait la même chose.
La chaîne 123 est le même que le nombre 123 lorsque vous utilisez égaux doubles.
Lorsqu'il est utilisé égaux triples, il a également veut s'assurer que
le type est le même.
Donc, parce que c'est une chaîne et c'est un certain nombre, même si elles sont à la fois
123, lorsque vous utilisez triple égal, vous obtenez faux.
Dans la double égale cas, vous obtenez vrai, parce égaux doubles n'a pas
soins sur le type.
Triple égaux ne se soucient de type.
Questions?
OK.
>> Et une autre chose à propos de Javascript portée est une sorte de monde sauf si vous êtes
dans une fonction.
Et il fonctionne de la même manière PHP fait.
Donc, nous allons passer par cet exemple.
I i mis à 999.
Et puis je vais dans cette boucle.
Donc, si je l'impression i dans le présent pour boucle, je m'attends à 0, 1, 2, 3, 4.
J'arrive à i = 4.
Il incrémente i maintenant à 5 à la fin de la boucle de.
Et puis il éclate de la boucle, parce qu'il ne remplit pas la
plus conditionner.
>> Que pensez-vous que la prochaine console.log imprime?
Voilà donc ce qu'il ferait en C. En C, parce que si vous avez comme var i l'extérieur
et vous avez var i dans une boucle, comme un pour la boucle, il fait de telle sorte que
c'est scope que les deux i de sont différentes.
En JavaScript, il sera juste traiter comme la même i.
Je reçois 5, parce que c'était la valeur après qu'il est sorti hors de la boucle.
Donc, ces i de i sont les mêmes.
Cela fait-il sens?
>> Eh bien, il est logique de un point de vue JavaScript.
Mais le même paradigme ne reporter à C. Ils ont
différentes règles de portée.
Oui.
>> PUBLIC: [inaudible]
en dehors de la fonction [inaudible]?
>> JOSEPH ONG: Donc, en dehors de la fonction qui?
Donc, je vais y revenir dans un instant.
Nous appelons donc foo (i).
Ceci passe i dans foo, par incréments , puis l'enregistre.
Il était donc 5.
Ainsi, il devient 6.
Mais ce dont je parle est que je dans cette fonction.
Parce que c'est un paramètre, il est scope à cette fonction.
Donc, une fois que j'aurai fait sortir de cette fonction, il est maintenant passer
Retour à l'ancien i.
Que i est seulement parce scoped c'est dans une fonction.
Et nous avons portée et les fonctions.
Mais nous n'avons pas portée à l'extérieur des fonctions JavaScript.
Cela fait-il sens?
Oui.
Question.
>> PUBLIC: Same [inaudible]?
>> JOSEPH ONG: Donc oui.
En PHP, c'est le même genre de chose.
Il ya une légère subtilité fait.
Mais vous pouvez me poser des questions sur que, après l'examen.
Vous n'avez pas vraiment besoin de savoir cette subtilité pour le quiz.
Pour toutes fins utiles, comme des variables, globale et PHP, sauf si
ils sont dans une fonction, même chose en JavaScript.
Oui.
>> PUBLIC: Pourquoi est-ce qui a permis à JavaScript et nulle part ailleurs?
>> JOSEPH ONG: Alors, pourquoi est-il permis en JavaScript et pas en C?
C'est juste celui qui est venu avec JavaScript a décidé que c'était OK
JavaScript.
Donc, c'est comme un langage de programmation convention comme nous le dirions.
Oui.
>> PUBLIC: Alors pourquoi aller de 6 à 5?
>> JOSEPH ONG: il a donc de 6 à 5, parce que quand je je suis passé dans foo, que
i l'intérieur de foo est maintenant étendus à foo, parce ampleur existe dans les fonctions en
JavaScript.
Mais une fois que je sors d'ici, car il a été portée a été définie à la fonction, je suis juste
utilisant le i régulière qui était à l'intérieur le reste du flux de contrôle.
Donner un sens?
Puis-je passer?
Très bien.
Cool.
>> L'acceptation de ce est des objets sont passés par référence.
Vous savez quand vous passez un tableau en C vous pourriez
effectivement modifier le tableau?
C'est la même chose en JavaScript.
Si je passe un objet, dans ce cas, je Milo passé dans cette fonction de catify.
Milo commence.
Son nom est Milo Banana.
Je passe cet objet dans une fonction parce que c'est un objet, une associatif
tableau en JavaScript.
>> Lorsque j'effectue une opération dans cette fonction, il sera
effectivement changer l'objet.
Donc, cela ne se produira pour les objets en JavaScript, tout comme il arrive
pour les tableaux à l'intérieur du nom de C. Alors Milo sera effectivement devenu chat maintenant.
Cela fait-il sens?
Donc, cela ne fonctionne que pour les objets.
Les objets sont passés par référence.
Oui.
>> PUBLIC: Donc, vous dites que à la différence de la variable i.
>> JOSEPH ONG: Ouais.
Quelle variable j'étais juste un certain nombre, non?
C'est comme en C lorsque vous passez un Entier, il fait une copie.
Et lorsque vous passez un tableau, il fait changements dans la matrice réelle
C. La même chose se produit avec JavaScript dans ce cas.
Très bien.
Et à côté, Milo est triste parce que il est maintenant un chat.
C'était en fait Milo après certaines visite chez le vétérinaire.
>> Alors, comment pouvons-nous utiliser JavaScript dans une page web?
Nous pouvons inclure.
Ceci est du code HTML avec les balises de la bande.
J'ai donc balises bande là.
Et puis j'ai mis un peu de JavaScript code dans les balises de script.
Et puis il exécute ce.
Quand je fais juste comme ça, c'est appelé JavaScript ligne.
C'est une sorte de désordre, parce que le JavaScript est effectivement dans le code HTML.
>> Une meilleure façon de le faire, beaucoup plus agréable, est d'écrire votre JavaScript dans une
fichier externe et de fournir ensuite la balise script avec une source.
Et ce sera à ce fichier JavaScript et lire le code JavaScript à partir
ce fichier à la place.
Et de cette façon, vous n'avez pas beaucoup d' JavaScript au début de votre
fichier HTML, ce qui rend il vraiment malpropre.
Vous venez de le mettre ailleurs.
Et puis il va lire à partir de là.
Saviez-qui fait sens?
>> matière de placement.
Dans ce cas particulier, la script est avant le corps.
Alors, quand j'exécute cela, il ya rien dans le corps encore.
Peut-être que cela fera un peu plus détecter le moment où je montre la partie suivante.
Dans ce cas, le script vient après la div.
Ainsi, la div apparaît effectivement sur la première page.
Ici dans ce petit cercle rouge, vous voyez le texte apparaît.
Et puis l'alerte apparaît.
>> Dans le premier cas, parce que le script C'était avant la div, la
alerte apparaît en premier.
Et puis la div apparaît après vous fermez la boîte.
Donc l'exécution qui compte.
Donc, nous allons garder cela à l'esprit.
Ce sera important dans un peu.
OK.
Si bien, comment voulez-vous attendre jusqu'à ce que la toute la page est chargée alors avant de vous
exécuter du code?
Nous allons entrer dans ce un peu peu plus tard aussi.
Mais juste garder ce placement questions à l'esprit lorsque nous
venir à une autre diapositive.
>> Donc, nous arrivons à DOM maintenant.
Et ce qui est DOM?
Donc, si vous regardez le code HTML, c'est juste un tas de texte à l'écran.
Alors, comment ne JavaScript sais que il s'agit d'un élément HTML?
Donc, nous devons avoir un peu de mémoire représentation de cette
structure que nous avons.
Et chaque fois que nous avons cela en mémoire représentation en JavaScript, nous appelons
que le DOM.
Et c'est juste une façon que les gens ont décidé que nous devrions représenter ce
structure HTML comme.
>> Et qu'est-ce que DOM ressembler?
Eh bien, dans la représentation de la mémoire, nous prenons ce texte.
Et nous nous tournons dans la mémoire représentation.
Donc, c'est le code HTML.
Donc, nous trouvons d'abord que tous les Arbre DOM dispose d'un document.
Il ressemble à un arbre.
Et le document contient le code HTML tag, en fait tout
l'intérieur de cette entreprise.
La balise HTML a deux enfants.
Il a une tête.
Cette tête, si vous regardez l'indentation là-bas à la façon dont il est structuré
entre les balises proches, tête a un enfant.
L'enfant est le titre.
Exactement.
>> Maintenant, nous avons un enfant de corps.
Et puis ce corps a une enfant appelé la famille.
Et que la famille a trois enfants -
le plus ancien, moyen, et le plus jeune.
Donc, vous devriez savoir comment dessiner un diagramme comme ça quand nous vous demandons comment
de tracer un diagramme lorsque nous donnons vous le code HTML sur la gauche.
Savoir comment produire l'arborescence DOM.
Et à l'intérieur de ces choses, il ya juste un texte, que j'ai représenté
comme des petites boîtes.
>> Est-ce que cette arborescence DOM faire sens et ce que le DOM est?
Alors, que se situe le P?
Ici, le p-bas dans cette balise représente un
balise de paragraphe en HTML.
Ainsi, vous pouvez regarder vers le haut.
Mais cela signifie juste que c'est une espace pour un texte.
Et il a un certain style CSS par défaut, parce que c'est une balise de paragraphe.
Mais ne vous inquiétez pas vraiment cette partie trop.
Il suffit de savoir que c'est un espace réservé pour un texte.
Oui.
Question?
Oui.
>> PUBLIC: Vous venez de mentionner CSS.
La famille de hachage et l' tout cela est essentiellement
représentant ID de CSS?
>> JOSEPH ONG: Oui, exactement.
Je vais arriver à ce que ces hachages dire dans une seconde.
Quand Angela alla CSS, elle parlé sélecteurs CSS.
Ce sont les sélecteurs CSS elle parlait.
Oui, Rob?
>> ROB BOWDEN: Je voudrais également commenter que DOM à l'intérieur de la balise title
est aussi un nœud de texte.
>> JOSEPH ONG: Droit.
Donc, à l'intérieur de la balise de titre, J'ai des DOM texte.
Alors, vraiment, ce titre devrait avoir comme un petite boîte se détacher de lui aussi bien.
Mais il n'a pas vraiment d'importance trop dans ce cas.
Nous ne nous soucions pas vraiment sur les nœuds de texte, comme nous les appelons, trop.
OK, nous faisons.
Apparemment, nous faisons.
Et je vais fixer que lorsque Je télécharger à nouveau.
Cela fait-il sens?
>> Alors, comment pouvons-nous travailler avec le DOM?
Si vous travaillez avec le DOM dans JavaScript, il existe deux étapes.
Vous sélectionnez un élément DOM.
Et puis vous faites des choses pour elle.
Donc dans ce cas, abstraitement, j'ai sélectionné l'élément central.
Et puis un exemple de faire des trucs pour elle serait de changer le texte.
C'est l'habitude d'être Bob.
Maintenant, ce que j'ai fait pour elle était que j'ai changé Bob à Milo dans ce cas.
>> Alors, comment pouvons-nous réellement faire cela?
Comment faisons-nous la sélection?
Et comment pouvons-nous ne le faire des trucs à la chose une fois que nous avons pris il?
Eh bien, la façon dont vous les gars ont appris dans cette classe est d'utiliser quelque chose que nous
appelé jQuery.
Alors, quelle est jQuery?
jQuery est une bibliothèque qui permet JavaScript plus facile à écrire.
Donc, quelqu'un a pris le temps et écrit jQuery.
>> jQuery est en fait écrite en JavaScript.
Et puis parce qu'ils ont fait cela, nous maintenant avoir tout un tas de fonctions qui
nous pouvons utiliser que faire de notre vit vraiment facile.
Alors, quelles sont quelques-unes des choses qu'il fait?
Il permet de sélectionner des éléments plus facile.
Il permet de changer HTML, l'ajout de classes plus facile.
Il est plus facile Ajax.
Nous y reviendrons dans une seconde.
>> Et c'est analogue aux bibliothèques C.
Donc, vous incluez string.h, vous êtes strlen.
Vous obtenez strcpy, toutes ces choses.
Lorsque vous incluez jQuery, vous obtenez agréable façons de sélectionner des éléments au changement
choses, et cetera.
Vous obtenez des fonctionnalités supplémentaires JavaScript ne vous donne pas.
Donc, jQuery est pas le JavaScript.
jQuery est une bibliothèque qui est écrit dans JavaScript qui rend le JavaScript
plus facile à écrire.
>> Donc jQuery n'est pas une programmation langue.
Mais Javascript.
faire.
Bien sûr, vous obtenez le droit de votre terminologie.
Vous avez des questions?
Oui.
Est-ce une question?
Très bien.
Alors, comment utilisez-vous jQuery?
Eh bien, quand vous écrivez quelque Le code JavaScript et vous incluez une
jQuery en haut de votre fichier en tant que fichier de script, vous utilisez le signe de dollar
maintenant pour avoir accès à jQuery.
Et ceci est différent de le signe de dollar en PHP.
>> C'est le même symbole tapez sur votre clavier.
Mais ils font des choses très différentes.
Signe du dollar en PHP signifie que ce comment je déclare une variable.
En JavaScript, quand vous avez inclus jQuery, il est synonyme de jQuery.
Donc, gardez cela à l'esprit.
Alors, comment pourrions-nous choisir les éléments DOM?
Eh bien, quand vous le faites le laid JavaScript Ainsi, vous accédez à la
documenter variable globale.
Et puis vous obtenez élément par famille ID.
C'est vraiment long et verbeux et pas très agréable.
>> Ou vous pouvez obtenir tous les éléments qui sont une balise p.
Cela fonctionne aussi en JavaScript.
Mais nous n'avons jamais vraiment montré vous la syntaxe trop.
Qu'est-ce que nous avons montré que vous étiez jQuery.
Alors que toute la sélection là-haut a été exprimé dans JavaScript obtient juste
condensé de ce très bel dollar signer famille hashtag.
Et $ p, là où c'est comme ça.
Si vous souhaitez sélectionner toutes les balises p l'intérieur d'une famille, nous mettons un espace
entre les deux.
Et maintenant, nous obtenons tous les p les balises à l'intérieur d'une famille.
>> Et vous sembler familier?
Eh bien, Angela a parlé sélecteurs CSS.
Donnez-moi une seconde.
Et afin de sélectionner un élément, vous utilisez simplement la même chose que vous
ferait avec un sélecteur CSS.
Si vous mettez un hachage devant de celui-ci, il sélectionne par ID.
Un point sélectionne par des classes.
Si vous avez juste la chose sans hachage ou des points, il sélectionne les tags.
Questions.
Oui?
>> PUBLIC: Lorsque nous utilisons dans notre point HTML, n'est-ce pas jQuery?
>> JOSEPH ONG: Dot dans notre HTML est une chose JavaScript.
Ce n'est pas une chose jQuery.
La façon dont vous les gars ont appris avec jQuery est à utiliser. html.
Et puis vous avez passé tout ce qu'il le code HTML sera.
Donc, je vais y revenir dans un peu un second réellement.
Alors, comment pouvons-nous faire des choses à l'élément une fois que nous avons choisi il?
Voilà donc un exemple de la sélection d'un élément.
Alors maintenant, nous voulons faire des choses pour elle.
>> Donc dans ce cas, permettez-moi de revenir à la diapositive précédente.
C'était Bob avant.
Et je veux changer cette dans le HTML et Milo.
J'appelle donc la fonction HTML à partir de l'élément.
Cette fonction HTML est une méthode d'élément.
Et puis je lui donne ce Je veux que le HTML soit.
Et il remplace tout ce qui est à l'intérieur de cette balise avec ce que je lui donne.
Oui.
Question?
>> AUDIENCE: Le hashtag est utilisé pour que le jQuery.
[Inaudible]
nous n'aurions pas l'utiliser.
>> JOSEPH ONG: Oui, exactement.
Mais ne vous inquiétez pas trop JavaScript sur pur.
Je veux juste vous les gars de se concentrer sur la façon dont vous le ferait avec jQuery, parce
que ça va être la importante partie sur le questionnaire.
Droite.
Exactement.
Donc, vous voyez que hashtag, de sorte que correspond à sélectionner l'élément à
au milieu d'identité à cause de ce hashtag.
Signifie Hashtag ID.
Et cet élément a un ID de milieu.
C'est donc l'élément que nous sélectionnons.
>> PUBLIC: [inaudible].
signe dollar hashtag [inaudible]?
>> JOSEPH ONG: Donc pas.
La question est peut vous utilisez. Valeur.
Et. Valeur ne fonctionne que sur des éléments qui sont entrées.
Dans jQuery, il serait . Val, pas de valeur..
Donc, je vais arriver à un petit exemple qui démontre tout cela en combinaison
dans une seconde.
Mais je pense que cela sert un petit extrait fait sens pour les gens jusqu'ici.
Vous voulez changer le code HTML, appeler la méthode HTML.
Oui.
>> PUBLIC: Pouvez-vous expliquer la méthode à nouveau?
>> JOSEPH ONG: Donc, une méthode est juste un fonction qui appartient à l'un, dans ce
cas, l'un de ces éléments DOM, parce que vous voyez que je
sélectionnez le premier élément.
En fait, permettez-moi d'utiliser la souris.
J'ai choisi le premier élément.
Et puis j'ai appelé ce code html fonctionner qu'il avait.
Et parce que cette fonction appartient à cette chose, nous l'appelons une méthode.
C'est juste un nom de fantaisie pour elle.
Le dire.
Alors rappelez-vous, nous avons sélectionné l'élément maintenant.
Et nous avons mis à l'intérieur de la variable d'élément.
Corriger?
>> Alors, quand nous voulons changer le code HTML de à l'intérieur, parce que c'était Bob avant, vous
vouloir changer ce texte à Milo.
Nous appelons donc HTML.
Et nous lui disons ce que le HTML à l'intérieur cet élément doit être maintenant.
Et il change à Milo, parce que je lui ai donné Milo.
>> PUBLIC: ils sont donc travailler ensemble.
[Inaudible]
>> JOSEPH ONG: Ouais, ouais.
Ils travaillent ensemble.
Alors l'un d'eux choisit le premier élément.
Et le second fait quelque chose.
Oui.
>> PUBLIC: [inaudible].
Si cette méthode est différente de HTML vous avez la méthode égalité réelle.
>> JOSEPH ONG: Ouais.
C'est une méthode différente.
Et nous pouvons couvrir que dans une seconde quand nous arrivons à un exemple.
Je veux m'assurer que nous accélérons parce que nous sommes à court de temps.
Mais nous sommes à court moyen au fil du temps maintenant.
OK.
Cool.
Donc, si vous voulez ajouter une classe, il ya également une méthode de classe de complément.
Ceci est juste un exemple de ce vous pouvez faire avec jQuery.
Cela ajoute simplement une classe.
>> Si vous voulez supprimer, vous pouvez appeler supprimer.
C'est juste une autre chose que vous pouvez faire.
Donc, plus d'exemples de choses que vous pouvez faire.
Donc, je peux juste le mettre à haut comme ça?
Le plus jeune supprimer.
Si je viens j'exécute que JavaScript à le haut de mon dossier, sera que travailler?
Droite.
Parce milieu n'existe pas encore.
Donc, cela ne va pas au travail.
Ordre d'exécution.
Il va vers le haut en premier.
Qu'est-ce?
>> PUBLIC: benjamin n'existe pas encore?
>> JOSEPH ONG: Ouais.
Benjamin n'existe pas encore.
Exactement.
>> PUBLIC: Vous avez dit milieu.
>> JOSEPH ONG: Désolé.
Benjamin n'existe pas encore.
Et l'autre chose est que je n'ai pas inclus le jQuery
déposer demander un script src.
Donc, ce n'est pas d'aller travailler.
En fait, je n'ai pas fait cela dans la diapositive suivante, qui est
censé résoudre ce soit.
Mais la façon dont nous faisons ce que JavaScript est event driven.
Donc, ce que nous faisons, c'est que nous utilisons un événement handler pour y arriver.
Et si je sélectionne le document d'abord régler.
Je dis, OK, lorsque le document est prêt, permettez-moi de courir une fonction.
Donc, c'est tout ce que les moyens de syntaxe.
>> J'ai choisi le document.
Maintenant, lorsque le document est prêts, exécuter la fonction.
Et ici lorsque le document est prêt, ce qui signifie que tout le HTML a
chargé, alors je lance la fonction qui supprime cet élément.
Et maintenant, quand je lance cette fonction que j'ai passé en prêt, je suis
garanti que tous les fichiers HTML sur le Cette page va exister en premier.
Oui.
Question?
>> PUBLIC: Quel est le mot clé event au sein de la fonction?
>> JOSEPH ONG: Donc, cet événement-clé dans le fonction est juste un paramètre qui
est transmis à la fonction pour tout événement.
C'est juste quelque chose que vous obtenez gratuitement.
Lorsque vous utilisez des gestionnaires clés pset8, cet événement pourrait vous dire, pour
exemple, qui touche enfoncée sur.
Dans ce cas, pour un événement ready, ce n'est pas vraiment super utile.
Mais pour un événement clé en bas, il est plus utile, parce que vous obtenez de savoir qui
touche enfoncée en accédant à clé Code de cet objet de l'événement.
Corriger?
Cela fait-il sens?
OK.
Oui.
Question?
>> PUBLIC: Alors pouvez-vous mettre l' balise script plus bas?
>> JOSEPH ONG: Donc oui.
Vous pourriez mettre le script marquer plus bas.
Mais alors, il devient vraiment salissant.
Et nous aimons à centraliser toutes les de notre code en un seul endroit.
Et cela va nous permettre de le faire.
Rappelez-vous plus tôt, je le disais il ya un mieux façon de s'assurer que les éléments sont
sur la page avant d'exécuter le code?
Et c'est juste une belle façon vous accomplir cela.
>> PUBLIC: [inaudible].
>> JOSEPH ONG: Ouais.
Vous auriez encore, non?
Car n'oubliez pas, vous avez inclus le déposer au haut de la page.
Donc ça va exécuter avant de vous arrivez au bas de la page.
OK.
Ainsi, vous pouvez également ajouter un autre type de gestionnaire d'événements.
Celui-ci traite juste clics.
Lorsque je clique sur le plus jeune, alors il apparaîtra avec une alerte.
C'est juste un autre type d'événement.
Par opposition à l'événement prêt, vous maintenant utiliser l'événement click lorsque vous recevez
clique sur un élément.
>> Et dans ce cas, n'oubliez pas, le clic gestionnaire est attaché à la plus jeune.
Ainsi, il arrive que lorsque Je clique sur le plus jeune.
Et dans l'autre, l'événement ready a été attaché au document.
Alors qu'il attend le document être prêt.
Donner un sens?
Je pense que je peux passer.
Oui.
Question?
>> PUBLIC: [inaudible].
dans ce cas, vous utilisez [inaudible].
>> JOSEPH ONG: Oh, oui, parce que dans ce cas, je dois attendre pour les plus jeunes
élément à apparaître à l'écran, avant que je puisse joindre un gestionnaire de clic à
, ce qui est la raison pour laquelle je l'ai mis à l'intérieur d'un document prêt.
OK.
Et à côté, donc c'est un grand exemple de comment vous allez combiner tout.
Ceci est juste un exemple de validation de formulaire vous avez vu dans la leçon.
Donc prendre étape par étape comme vous passez par ce.
Et il sera totalement OK.
Il suffit de lire de haut en bas.
>> J'ai une forme au fond.
Lorsque le document est prêt, j'attache une présenter gestionnaire de la forme, de sorte que
lorsque je soumets le formulaire, je reçois les valeurs l'intérieur de chacune de ces entrées.
Et je vérifie si il est vide.
Si il est vide, je reviens faux, parce que Je ne veux pas de soumettre le formulaire,
parce que la forme est erroné.
Si le mot de passe est vide ou il est moins de huit caractères, je ne me soumets pas
la forme, parce que c'est aussi mal.
Et le faux de retour seulement empêche le formulaire de soumission et
aller à une nouvelle page.
>> Et nous espérons, cela fait sens.
Je pense que vous devez marcher à travers cette étape de code pas à pas sur votre propre.
Et une fois que vous comprenez ce que la sélection éléments et faire des choses pour elle
implique effectivement, cela fera beaucoup de sens pour vous.
Oui?
>> PUBLIC: Qu'est-ce que la name = nom signifie?
>> JOSEPH ONG: Donc le nom = nom d'utilisateur et name = mot de passe signifie suffit de regarder la
attribut de quelque vous choisissez.
Et puis cela doit correspondre.
Donc, nous entrons dans l'enregistrement.
Et puis nous regardons toutes les entrées et l'enregistrement.
Et puis nous choisissons celui où le nom attribut est égale à nom d'utilisateur.
Alors que la première sélection ne sélectionne l'entrée de nom d'utilisateur.
Et ce second sélecteur sélectionne seulement le mot de passe, parce que ceux-ci ont
leurs noms attributs définis comme ce ils sont censés être.
Question?
>> PUBLIC: Lors de la présentation, comment ne l' partie inférieure de résoudre la partie supérieure?
>> JOSEPH ONG: Donc, c'est parce que du gestionnaire d'événements.
Nous allons donc attendre pour présenter un événement qui est déclenché à partir de la forme.
Et c'est tout ce qui est présenter.
Pourquoi dois-je appeler présenter là-haut?
Il dit, lorsque le formulaire est soumis, Je reçois un événement soumettre.
Alors permettez-moi juste que intercepter et puis exécuter ce code à la place.
Oui?
>> PUBLIC: Pourquoi avez-vous d'avoir événement de fonction?
Pourquoi pouvez-vous pas juste [inaudible]?
>> JOSEPH ONG: Parce que dans JavaScript, vous avoir à déclarer les fonctions.
C'est comme ça que cela fonctionne en JavaScript.
Il faut dire que ça va pour exécuter une fonction.
Donc, vous dites ce que vous êtes attendre une fonction ici à la place de
seulement accolades.
>> PUBLIC: Et la fonction est ce que s'ensuit-il?
>> JOSEPH ONG: Ouais.
La fonction est tout ce qui est à l'intérieur les accolades après
cette fonction clé.
Oui?
>> PUBLIC: [inaudible].
>> JOSEPH ONG: Pour soumettre?
>> PUBLIC: Non, pour la fonction sans l'événement.
>> JOSEPH ONG: Ouais.
Donc, sans l'événement, vous pouvez avoir.
Si vous n'avez pas besoin de l'événement, alors vous pouvez simplement l'omettre.
Mais si vous le faites, alors vous juste mise là.
Oui.
Question rapide?
>> PUBLIC: [inaudible].
>> JOSEPH ONG: Ouais.
Parce que ce que vous devez faire, la document.ready dit juste attendre pour tous
le code HTML de la page à charger en premier.
Et généralement, vous voulez que vos éléments en place avant d'exécuter n'importe quel code.
Très bien.
Nous devons arriver à Ajax.
Nous n'avons pas beaucoup de temps.
Donc, avantages et inconvénients.
JavaScript est plus facile essai écrire avec jQuery.
Mais jQuery est un peu lent.
>> C'est comme PHP est plus lent que C, car il est interprété.
Et jQuery est un peu plus lent que JavaScript, car il fait beaucoup de
les choses sous le capot.
Et si vous utilisez jQuery, c'est juste un peu plus lent que
JavaScript, même si elle vous donne belle élégance.
Et enfin, l'Ajax.
Jusqu'à présent, avec l'Ajax, vous n'avez pas vu l'Ajax en termes de pset7 encore, parce
quand vous le faites, vous soumettez une forme de citation.
Il charge une nouvelle page.
Ainsi, vous obtenez ce grand éclair blanc sur la page pendant que
deuxième chargement de la page, c'est exact?
>> Ce serait vraiment bien si vous n'a pas eu ce flash.
Comme Facebook, si vous venez de faire défiler à bas, il ajoute un nouveau contenu
sans actualiser la page entière.
Donc, quelque chose comme ça serait bien.
Ceci est du code JavaScript sur le côté gauche.
Vous obtenez ce qui est à l'intérieur de cette entrée.
Vous obtenez l'information d'actions de Yahoo!
Et puis vous faites une grande chaîne qui dit, OK, c'est le message que je veux
à afficher sur l'écran.
Et puis vous mettez ce message à l'intérieur d'un élément HTML qui obtient
affiché sur l'écran.
>> Donc, c'est tout ce qui se passe ici.
Donc, fondamentalement, parce que c'est tout JavaScript et vous n'avez pas besoin de courir
plus PHP, ce sera assurez-vous que la page ne se recharge pas.
Donc, c'est juste une idée abstraite que je dis ici pour le moment.
L'idée abstraite est que si vous le faites tout en JavaScript, vous ne disposez pas d'un
rafraîchir la page.
Mais comment voulez-vous fait ça?
>> Eh bien, effectivement, nous allons parler de un problème avec cette première.
Un problème est en JavaScript, exécution est synchrone.
Donc, vous devez attendre un ligne pour finir avant de vous
exécuter la ligne suivante.
Et si je vais chez Yahoo!, et leurs serveurs sont très lents, et
il leur faut trois secondes pour rendez-moi ce stock d'infos?
Quand j'ai frappé cette ligne de prix, si le exécution soit synchrone, comme il est par
défaut, ce qu'il va juste faire est votre navigateur va gagner du
environ trois secondes.
Et vous n'allez pas être en mesure de faire quoi que ce soit alors qu'il obtient ces données.
Ça va être gelés.
>> Et c'est mauvais.
Vous ne voulez pas qu'un utilisateur avoir une page web congelé.
Corriger?
C'est tout simplement mauvais.
Tout le monde est d'accord?
Si vous naviguez sur Facebook et il fige et vous ne pouvez rien faire, vous
suis vraiment frustré.
Donc, la solution est que nous faisons quelque chose de asynchrone à la place.
Donc, tout ce truc asynchrone dit est, je vais demander à ce
URL pour certaines données.
Et puis je vais continuer.
Je vais garder l'exécution quel que soit le code qui a été par la suite.
>> Et puis à chaque fois que les données sont prêtes, alors je vais le traiter.
C'est tout ce qu'il dit.
>> PUBLIC: Ajax fait juste code asynchrone?
>> JOSEPH ONG: C'est un moteur asynchrone manière de extraire des données.
Donc la première chose à propos de Ajax est il me permet d'obtenir des données
à partir d'un site Web externe.
Et la deuxième chose est qu'il permet de s'assurer que ma page ne se bloque pas pendant que je suis
aller chercher les données.
C'est la partie asynchrone de celui-ci.
Parce qu'il va quelque part ailleurs, parce que je dis je continue sur tout
c'est aller chercher ces données, que il est asynchrone.
Je garde d'exécution.
>> Alors gardez que asynchrone idée à l'esprit.
Et je vais vous montrer ce que est la différence.
La version synchrone est sur le côté gauche.
La version asynchrone est sur le côté droit.
Regardez les chiffres pour voir ce qui correspondent à ce qui suit
exécute à chaque ligne.
Là-bas, l'alerte se présente en premier.
Parce que d'obtenir les informations boursières de Yahoo!
prend trois secondes, il cale pendant trois secondes.
Et puis il alerte le prix après ces trois secondes.
>> Donc, maintenant, que les spectacles d'alerte vous à ce moment-là -
trois secondes po
Et puis il avertit par la suite.
Donc, il va juste étape par étape.
C'est comme ce que vous les gars accepterait, correct?
Avec l'exécution asynchrone, vous alerter en premier.
Ensuite, vous partez à cette URL.
Et vous dites, je vais il suffit de demander pour les données.
Et puis je vais traiter par la suite.
Ainsi, il exécute immédiatement l' ligne suivante après que je fais
demande asynchrone.
>> Donc un 0,001 secondes, vous voyez salut alerte.
Exécuter cette fonction, bye alerte.
Et parce que j'ai fait une promesse que je serait de traiter les données plus tard, ce
qui se passe, c'est quand que les données reviennent Trois secondes plus tard, alors que je cours
fonction que j'ai là-bas.
Oui?
>> PUBLIC: Pourriez-vous préciser ou clarifier ce que signifie Ajax?
>> JOSEPH ONG: Alors Ajax est une façon que si je besoin de données quand je suis sur un site web et je
ne veulent pas de rafraîchir la page, puis J'utilise cette technologie appelée Ajax.
Cela signifie essentiellement juste, aller chercher données d'un autre site.
Et de le faire d'une manière qui vient ne pas caler ma page web.
>> PUBLIC: Donc, c'est qu'un inhérente partie de JavaScript ou jQuery?
>> JOSEPH ONG: Donc, quelqu'un a écrit une façon de faire ce en JavaScript il ya longtemps.
À un moment donné, il n'existait pas.
Et si quelqu'un a inventé cette technique pour permettre aux gens de demander ces données
dans ce mode.
Et ils ont écrit des trucs de le faire pour vous.
Et jQuery vous donne juste ce très belle façon de faire
avec ce $. obtenir la fonction.
questions?
Je peux répondre aux questions concernant Ajax après aussi.
Je serai là.
>> Donc, il nous allons nous récupérer les données sans rafraîchir la page.
Et il nous allons nous le faisons dans un moyen asynchrone qui
ne fige pas la page.
Trop longtemps, n'a pas lu si explication était trop long pour vous.
Donc finalement, cross-site des attaques de script.
Nous l'avons vu avec Zamyla.
Si dans ma base de données que quelqu'un a ce nom, qui est cette balise de script, et je
avoir un code sur ma page qui s'imprime sur les noms des personnes dans une rangée, ou j'ai
un code JavaScript qui insère ce nom dans la page,
ce que HTML obtient produit?
Eh bien, je imprimer la balise HTML.
J'imprime tous ces balises.
>> J'arrive à la partie où je suis impression sortir avec mes amis.
J'imprime Lauren sur.
Il imprimer Milo sur.
Et puis mon nom dans la base de données est après de script
peu flatteuse statut Facebook.
Parce que j'ai inséré ce dans la page parce qu'il ressemble à JavaScript, quand
cette page est envoyée à l'utilisateur, il est exécuté comme JavaScript.
Et c'est ce que nous appelons une cross-site scripting attaque.
Quelqu'un met des informations malveillantes dans votre base de données qui pourraient correspondre à
une chaîne de caractères ou plus une chaîne de caractères JavaScript.
>> Et quand il est imprimé à la la page de cette façon, alors que
qui se passe, c'est que du mauvais code est exécuté que je n'ai pas l'intention
pour qu'il exécutée.
Et c'est tout ce cross-site attaque de scriptage est.
Et la façon dont vous vous déplacer c'est comme Zamyla dit.
Vous venez d'emballer les choses en HTML caractères spéciaux.
Et cette HTML caractères spéciaux est un PHP fonction qui permettra d'éviter ce genre
de chose se passe pour vous si vous avez un malveillant
chaîne dans votre base de données.
Il s'échappe juste, de sorte que ce n'est pas le se interprété comme HTML.
Il remplace les petits crochets ce que nous appelons entités.
Et nous sommes allés au cours de cette conférence en trop.
Donc, je pense que vous les gars doivent avoir une bonne compréhension à ce sujet.
Questions?
Oui.
>> PUBLIC: Alors, comment le feriez la [inaudible]?
>> JOSEPH ONG: Dire qu'une fois.
>> PUBLIC: Comment le moniteur -
>> JOSEPH ONG: Droit.
Donc, vous avez quelque chose qui dit, quand Je m'inscris, tapez mon nom.
Je viens de taper dans ce domaine, mon nom est dépouillé poste peu flatteur Facebook
statut proche balise script.
Et qui vient qui est mis dans le base de données, parce que je ne peux pas dire à quelqu'un
dans le monde n'a pas un nom avec une flèche gauche ou la
mot script en elle.
Cela ne veut pas vraiment de sens.
Donc, je dois juste m'assurer que je désinfecter les choses avant que je l'imprime
sur la page.
>> Auditoire: Alors, les cartes spéciales HTML empêche les balises de script?
>> JOSEPH ONG: Ouais.
Donc, il n'empêche pas les balises de script.
Elle permet simplement de s'assurer que le des balises de script ne reçoivent pas
interprété comme HTML ou -
ouais.
Il vient juste comme ce il est en réalité.
Très bien.
C'était donc l'examen de quiz.
Cool.
>> [Applaudissements]