1 00:00:00,000 --> 00:00:08,070 2 00:00:08,070 --> 00:00:10,430 >> R.J. AQUINO: Vamos a empezar. 3 00:00:10,430 --> 00:00:12,310 Así que esta es la prueba 1. 4 00:00:12,310 --> 00:00:14,890 Aquí hay alguna información de alto nivel. 5 00:00:14,890 --> 00:00:19,915 La página Acerca de la prueba es en este URL, ya no CS50.net, aunque eso 6 00:00:19,915 --> 00:00:21,080 seguirá funcionando. 7 00:00:21,080 --> 00:00:26,920 Es CS50.harvard.edu/quizzes/2013/1. 8 00:00:26,920 --> 00:00:31,070 Es el gran Sobre la página, que le dice dónde y cuándo, es decir, el próximo miércoles 9 00:00:31,070 --> 00:00:32,100 en un montón de habitaciones. 10 00:00:32,100 --> 00:00:36,120 Y el próximo miércoles, I significar dos días a partir de ahora. 11 00:00:36,120 --> 00:00:37,890 Toda esta información está ahí. 12 00:00:37,890 --> 00:00:39,110 Pero es acumulativo. 13 00:00:39,110 --> 00:00:43,790 >> Así todo, desde la primera mitad del año es potencialmente en el cuestionario, 14 00:00:43,790 --> 00:00:50,780 porque no se puede hacer realmente avanzada cosas en C sin si las condiciones y 15 00:00:50,780 --> 00:00:51,920 para los bucles y similares. 16 00:00:51,920 --> 00:00:55,580 Pero habrá un énfasis en la material cubierto desde Cuestionario 0, 17 00:00:55,580 --> 00:00:59,570 empezando con las estructuras y Archivo I / O. Es típicamente más 18 00:00:59,570 --> 00:01:01,620 desafiante que Cuestionario 0. 19 00:01:01,620 --> 00:01:03,870 La puntuación media es normalmente inferior. 20 00:01:03,870 --> 00:01:05,980 Estudia mucho. 21 00:01:05,980 --> 00:01:09,340 >> Mientras que usted está estudiando, asegúrese de utilizar CS50/discuss para enviar sus preguntas 22 00:01:09,340 --> 00:01:10,830 y leer las preguntas de otras personas. 23 00:01:10,830 --> 00:01:13,550 Así que si usted no tiene alguna pregunta, entrar y leer 24 00:01:13,550 --> 00:01:14,580 preguntas de sus amigos. 25 00:01:14,580 --> 00:01:16,560 Probablemente son buenas preguntas. 26 00:01:16,560 --> 00:01:17,730 Y tomar los exámenes de práctica. 27 00:01:17,730 --> 00:01:20,750 Hemos estado dando pruebas de siete u ocho años. 28 00:01:20,750 --> 00:01:22,180 Todos están en línea. 29 00:01:22,180 --> 00:01:25,540 Preguntas futuros son similares a viejas preguntas. 30 00:01:25,540 --> 00:01:26,550 Así es como las hacemos. 31 00:01:26,550 --> 00:01:27,740 >> El cuestionario no existe todavía. 32 00:01:27,740 --> 00:01:28,670 Ninguno de nosotros ha visto. 33 00:01:28,670 --> 00:01:32,496 Pero va a ser similar concursos anteriores. 34 00:01:32,496 --> 00:01:36,500 Para esta sesión de revisión, esto no es una lista exhaustiva de temas. 35 00:01:36,500 --> 00:01:40,740 Usted no puede asistir a esta y luego perfectamente preparado para el examen. 36 00:01:40,740 --> 00:01:43,330 De lo contrario, no sería que gran parte de un concurso. 37 00:01:43,330 --> 00:01:46,270 Y esto tampoco es necesariamente todo lo que necesita saber acerca de cualquier 38 00:01:46,270 --> 00:01:46,970 determinado tema. 39 00:01:46,970 --> 00:01:50,520 Es la intención de quedar expuesto a las cosas hemos cubierto, te recuerdan lo que 40 00:01:50,520 --> 00:01:53,070 cubierta, y la forma en que lo cubrimos. 41 00:01:53,070 --> 00:01:57,030 Pero usted tendrá que ir más allá y más profundo cuando se estudia a una doble comprobación 42 00:01:57,030 --> 00:02:00,230 que usted sabe todo acerca de cualquier propuesta tema y que haya rellenado 43 00:02:00,230 --> 00:02:03,320 todas las esquinas que eran cubierto en clase. 44 00:02:03,320 --> 00:02:07,980 >> Las notas del examen te dicen que ir a la notas escribano, videos de conferencias de relojes. 45 00:02:07,980 --> 00:02:10,155 Esa es una buena manera de asegurarse de que ha cubierto todas sus bases. 46 00:02:10,155 --> 00:02:12,670 47 00:02:12,670 --> 00:02:17,340 Así que para empezar, cuando hice estas diapositivas, traté de poner donde encontré 48 00:02:17,340 --> 00:02:18,350 información. 49 00:02:18,350 --> 00:02:22,890 Así que para archivo de E / S, por ejemplo, Semana 7, Del lunes la conferencia, y el publicado 50 00:02:22,890 --> 00:02:27,960 Sección 6 y de problemas todos tienen información acerca de File I / O. He hecho 51 00:02:27,960 --> 00:02:28,840 esto para cada tema. 52 00:02:28,840 --> 00:02:33,010 Así que esas diapositivas de título puede ser útil para usted. 53 00:02:33,010 --> 00:02:38,950 >> Así que aquí tenemos File I / O. Recuerde, en Problemas 5, se utilizó fopen, fclose, 54 00:02:38,950 --> 00:02:41,210 fwrite, fread y fseek. 55 00:02:41,210 --> 00:02:48,090 Habiendo recuperado 30ish archivos JPEG y haber cambiado el tamaño y metido con 56 00:02:48,090 --> 00:02:50,320 mapas de bits, debe ser bastante familiar con estas funciones 57 00:02:50,320 --> 00:02:51,830 y cómo funcionan. 58 00:02:51,830 --> 00:02:54,420 Si ya no está familiarizado, Definitivamente revisarlos. 59 00:02:54,420 --> 00:02:56,860 Y asegúrese de que entiende lo que los diferentes argumentos son, 60 00:02:56,860 --> 00:02:58,260 cuando se utilizan. 61 00:02:58,260 --> 00:03:03,620 >> Pero los errores relacionados con archivos comunes se le puede pedir sobre - 62 00:03:03,620 --> 00:03:07,270 bueno, si te has olvidado de comprobar si fopen efectivamente trabajadas antes de ir a 63 00:03:07,270 --> 00:03:08,350 modificar un archivo. 64 00:03:08,350 --> 00:03:09,760 Eso podría ser malo. 65 00:03:09,760 --> 00:03:13,560 Si te has olvidado de un archivo fclose que ha fopened, eso es similar a 66 00:03:13,560 --> 00:03:14,400 una pérdida de memoria. 67 00:03:14,400 --> 00:03:15,980 Eso es muy malo. 68 00:03:15,980 --> 00:03:18,670 Y olvidar para comprobar si has alcanzado el final del archivo antes de 69 00:03:18,670 --> 00:03:19,790 empezar a escribir a la misma. 70 00:03:19,790 --> 00:03:22,320 >> Así que si usted dice, hey, estoy en el final del archivo. 71 00:03:22,320 --> 00:03:23,750 Dame 5 bytes más. 72 00:03:23,750 --> 00:03:27,370 Bueno, eso probablemente no va a trabajar de la manera que usted espera. 73 00:03:27,370 --> 00:03:30,930 Eso es realmente para File I / O, porque hicimos tanto de ella 74 00:03:30,930 --> 00:03:32,300 con fijó el problema. 75 00:03:32,300 --> 00:03:36,000 Así que si usted entendió lo que estaba pasando en problemas 5, recuerde los bitmats 76 00:03:36,000 --> 00:03:40,090 y los archivos JPEG, entonces usted está probablemente todos fijado para File I / O. Si eso es un poco 77 00:03:40,090 --> 00:03:44,770 difusa, sin duda revisar ese problema establecer y el material asociado. 78 00:03:44,770 --> 00:03:51,110 >> Las estructuras fueron el tema que estaban en el línea entre el 0 y el Cuestionario Cuestionario 1. 79 00:03:51,110 --> 00:03:53,090 No bastante hacer el corte para la Prueba 0. 80 00:03:53,090 --> 00:03:57,040 Así que sin duda estarán en Cuestionario 1, semana 7, el lunes. 81 00:03:57,040 --> 00:03:58,150 ¿Qué es una estructura? 82 00:03:58,150 --> 00:04:00,250 Aquí se muestra una estructura. 83 00:04:00,250 --> 00:04:03,140 Es como un nuevo tipo. 84 00:04:03,140 --> 00:04:07,940 Es como un contenedor para múltiples campos. 85 00:04:07,940 --> 00:04:12,970 >> En este caso, hemos declarado una estructura estudiante que tiene dos campos - 86 00:04:12,970 --> 00:04:17,750 una cadena que estamos llamando el nombre y un int que estamos llamando a la edad. 87 00:04:17,750 --> 00:04:21,450 Así que cuando me pase alrededor alumnos o yo modificar los estudiantes, voy a ser capaz de 88 00:04:21,450 --> 00:04:24,430 tener acceso a su nombre y su edad. 89 00:04:24,430 --> 00:04:26,670 Echemos un vistazo a algo de código para eso. 90 00:04:26,670 --> 00:04:29,090 Aquí vemos que he declarado un estudiante s, al igual que 91 00:04:29,090 --> 00:04:30,300 Declaro cualquier variable - 92 00:04:30,300 --> 00:04:32,430 int x, int y, et cetera. 93 00:04:32,430 --> 00:04:34,180 >> Así es estudiante s. 94 00:04:34,180 --> 00:04:37,370 Él comienza con nada en sus campos. 95 00:04:37,370 --> 00:04:38,240 Así que vamos a establecer. 96 00:04:38,240 --> 00:04:40,681 Establezca los campos de una estructura con puntos. 97 00:04:40,681 --> 00:04:43,780 Así que lo que he dicho aquí que s.name = RJ. 98 00:04:43,780 --> 00:04:46,470 Y s.age = 21. 99 00:04:46,470 --> 00:04:48,500 También puede actualizar los campos la misma forma en que actualiza 100 00:04:48,500 --> 00:04:49,550 el valor de una variable. 101 00:04:49,550 --> 00:04:53,270 Así que quiero cambiar mi nombre de RJ con no hay periodos de R.J. significado el 102 00:04:53,270 --> 00:04:54,540 forma correcta. 103 00:04:54,540 --> 00:04:58,890 Sería s.name = RJ, la misma como lo dijimos en un principio. 104 00:04:58,890 --> 00:05:00,030 Y entonces usted puede tener acceso a ellos. 105 00:05:00,030 --> 00:05:00,930 >> Así que les hemos preparado. 106 00:05:00,930 --> 00:05:01,840 Nosotros les hemos puesto al día. 107 00:05:01,840 --> 00:05:03,890 También puede acceder a ellos en la misma manera. 108 00:05:03,890 --> 00:05:09,330 Así que aquí, estoy imprimiendo R.J. Tiene 21 años. 109 00:05:09,330 --> 00:05:14,700 Y estoy acceso a esos valores con s.name y s.age. 110 00:05:14,700 --> 00:05:17,040 Así que eso es el acceso a las estructuras con la notación de puntos. 111 00:05:17,040 --> 00:05:17,850 Sí, la pregunta? 112 00:05:17,850 --> 00:05:21,176 >> AUDIENCIA: ¿Hay alguna razón en el diapositiva anterior que usted no puso 113 00:05:21,176 --> 00:05:24,848 estudiante en la línea superior, como typedef struct estudiante y luego 114 00:05:24,848 --> 00:05:25,840 estudiante al final? 115 00:05:25,840 --> 00:05:29,040 >> R.J. AQUINO: Así que la pregunta era, en esta diapositiva, hemos visto típicamente 116 00:05:29,040 --> 00:05:32,400 typedef struct nodo y luego el campos de la estructura y 117 00:05:32,400 --> 00:05:34,250 entonces el nodo palabra. 118 00:05:34,250 --> 00:05:37,790 Y ¿cómo es que aquí no lo dije, typedef struct estudiante y luego la 119 00:05:37,790 --> 00:05:39,820 campos de la estructura y luego los estudiantes? 120 00:05:39,820 --> 00:05:44,310 La razón es que yo no necesito acceder a ella en el interior de la estructura. 121 00:05:44,310 --> 00:05:46,270 Así que está bien dejarlo sin nombre. 122 00:05:46,270 --> 00:05:49,210 Yo sólo puedo dejarlo como una estructura anónima. 123 00:05:49,210 --> 00:05:53,130 >> La razón por la que lo hacemos por listas enlazadas y cosas es porque dentro de lo que necesita 124 00:05:53,130 --> 00:05:55,360 para hacer referencia a una estrella nodos struct. 125 00:05:55,360 --> 00:05:58,220 Así que la estructura tiene que tener un nombre, para que pueda acceder a ella más tarde. 126 00:05:58,220 --> 00:05:59,540 Es un detalle menor. 127 00:05:59,540 --> 00:06:04,750 Pero vas a ver típicamente typedef struct llaves si no es necesario 128 00:06:04,750 --> 00:06:08,720 el nombre y typedef struct algún nombre seguido de llaves si se quiere 129 00:06:08,720 --> 00:06:09,520 Necesitará el nombre. 130 00:06:09,520 --> 00:06:12,070 Así que esa es una buena pregunta. 131 00:06:12,070 --> 00:06:17,000 >> Y en ese punto, tenemos la tendencia a modificar estructuras y pasar alrededor de las estructuras de 132 00:06:17,000 --> 00:06:18,680 referencia, no por valor. 133 00:06:18,680 --> 00:06:21,940 Así que sólo tendremos que pasar alrededor de punteros a estructuras en lugar de pasar todo el 134 00:06:21,940 --> 00:06:23,150 Las estructuras ellos mismos. 135 00:06:23,150 --> 00:06:28,050 Así que está muy a menudo va a ser utilizando, en este caso, el estudiante o * 136 00:06:28,050 --> 00:06:34,150 struct nodo * o nodo * en lugar a los estudiantes o nodos. 137 00:06:34,150 --> 00:06:39,350 Así que aquí, lo he dicho, está bien, la variable ptr va a ser la dirección del s. 138 00:06:39,350 --> 00:06:45,570 Va a ser el puntero al estudiante R.J. 139 00:06:45,570 --> 00:06:48,965 >> Para que podamos llegar a esos campos la misma medida que cualquier cosa. 140 00:06:48,965 --> 00:06:51,460 En primer lugar, ID de referencia del puntero para obtener la estructura. 141 00:06:51,460 --> 00:06:55,530 Eso es * ptr y luego un punto y luego edad. 142 00:06:55,530 --> 00:06:58,790 Así que para tener acceso al campo, y he actualizado que ahora a 22, porque, seamos 143 00:06:58,790 --> 00:07:00,860 por ejemplo, que era mi cumpleaños. 144 00:07:00,860 --> 00:07:03,990 Hay una sintaxis abreviada usando la flecha aquí. 145 00:07:03,990 --> 00:07:07,060 Edad Flecha Así ptr es sólo el mismo que * ptr.age. 146 00:07:07,060 --> 00:07:10,150 147 00:07:10,150 --> 00:07:11,550 Ahora, eso es algo que tendrá que memorizar y recordar. 148 00:07:11,550 --> 00:07:15,010 >> La usaste mucho en pset6, el conjunto de procesadores ortografía. 149 00:07:15,010 --> 00:07:18,350 Pero esto es en realidad lo que está pasando de debajo del capó. 150 00:07:18,350 --> 00:07:20,500 Se dereferencing el puntero y luego acceder a ella. 151 00:07:20,500 --> 00:07:21,432 Consulta? 152 00:07:21,432 --> 00:07:22,682 >> AUDIENCIA: [inaudible]. 153 00:07:22,682 --> 00:07:25,860 154 00:07:25,860 --> 00:07:28,060 >> R.J. AQUINO: ¿Entonces por qué estamos usando punteros como estructuras en lugar de la 155 00:07:28,060 --> 00:07:29,500 Las estructuras ellos mismos? 156 00:07:29,500 --> 00:07:33,740 La razón sería si estás pasando una estructura a una función, es probable que 157 00:07:33,740 --> 00:07:36,900 que desee pasar en torno a sólo el 4 o así bytes que representan el puntero, como 158 00:07:36,900 --> 00:07:40,375 oposición a la potencialmente 30 o 40 bytes que son la estructura. 159 00:07:40,375 --> 00:07:44,410 Así que pasa algo a una función es más fácil cuando la cosa 160 00:07:44,410 --> 00:07:48,230 es menor en corto. 161 00:07:48,230 --> 00:07:49,074 Consulta? 162 00:07:49,074 --> 00:07:53,026 >> AUDIENCIA: Es posible que haya mencionado esto en el principio, pero hay 163 00:07:53,026 --> 00:07:56,000 otras diapositivas arriba en [inaudible]? 164 00:07:56,000 --> 00:07:58,960 >> R.J. AQUINO: Estas diapositivas serán después de la sesión de revisión. 165 00:07:58,960 --> 00:08:00,210 Vamos a publicar en el sitio web. 166 00:08:00,210 --> 00:08:02,450 167 00:08:02,450 --> 00:08:06,870 Así que seguir adelante y pasar ligeramente más rápido, vamos a hablar acerca de los datos 168 00:08:06,870 --> 00:08:07,350 estructuras. 169 00:08:07,350 --> 00:08:08,040 Hay un montón. 170 00:08:08,040 --> 00:08:10,080 Hemos cubierto un montón de ellos. 171 00:08:10,080 --> 00:08:12,500 Esto es lo que debe entender acerca de la estructura de datos. 172 00:08:12,500 --> 00:08:15,590 >> Usted realmente debe entender en un alto ¿Qué nivel de cada estructura es. 173 00:08:15,590 --> 00:08:21,190 ¿Puede explicar en Inglés a su amigo que no ha tenido CS50 cómo 174 00:08:21,190 --> 00:08:25,580 estamos organizando nuestros datos y por qué lo había estar usando algo de esta manera? 175 00:08:25,580 --> 00:08:26,990 Eso es cosa de una sola. 176 00:08:26,990 --> 00:08:29,650 Cosa de dos, entender la aplicación. 177 00:08:29,650 --> 00:08:34,270 Así que entender cómo usar estas cosas en C. Y vamos a ir sobre esto. 178 00:08:34,270 --> 00:08:39,030 >> Y entonces lo tres se conocen la tiempos de funcionamiento y las limitaciones de la 179 00:08:39,030 --> 00:08:40,470 diversas estructuras que estés utilizando. 180 00:08:40,470 --> 00:08:44,059 Así que entender por qué se utilizaría un la tabla de hash en lugar de una matriz. 181 00:08:44,059 --> 00:08:49,570 Entender qué tan rápido, en promedio, acceso a una tabla hash es. 182 00:08:49,570 --> 00:08:54,010 Entender lo que las operaciones son rápidas en lista enlazada, pero lento en matrices y 183 00:08:54,010 --> 00:08:56,080 viceversa. 184 00:08:56,080 --> 00:08:59,780 Así que para entender eso, usted tendrá que entender la notación Big-O sólo para saber 185 00:08:59,780 --> 00:09:01,310 cómo hablar de estos tipo de cosas. 186 00:09:01,310 --> 00:09:02,700 Y vamos a hablar de eso. 187 00:09:02,700 --> 00:09:06,040 >> Así que lo primero, listas enlazadas. 188 00:09:06,040 --> 00:09:07,770 Aquí está una foto de alto nivel de una lista enlazada. 189 00:09:07,770 --> 00:09:08,830 Se demuestra esto en clase. 190 00:09:08,830 --> 00:09:11,670 Normalmente tenemos 10 personas de pie en el escenario. 191 00:09:11,670 --> 00:09:16,790 Pero tenemos una serie de nodos donde cada nodo tiene un valor y un puntero 192 00:09:16,790 --> 00:09:18,610 a su valor siguiente. 193 00:09:18,610 --> 00:09:21,730 Así que para llegar de un nodo a otro, que solo decir, me da el siguiente nodo. 194 00:09:21,730 --> 00:09:22,530 Usted tiene ese nodo. 195 00:09:22,530 --> 00:09:23,770 Dame el siguiente nodo. 196 00:09:23,770 --> 00:09:24,400 Usted tiene ese nodo. 197 00:09:24,400 --> 00:09:28,790 Dame el nodo siguiente y así sucesivamente hasta que no hay izquierda nodo. 198 00:09:28,790 --> 00:09:31,850 >> Así que seguir hablando de en un alto nivel. 199 00:09:31,850 --> 00:09:34,100 Es muy fácil de insertar cosas en una lista enlazada. 200 00:09:34,100 --> 00:09:36,010 Si no se preocupan por el orden, que sólo puede caer 201 00:09:36,010 --> 00:09:36,840 justo al principio. 202 00:09:36,840 --> 00:09:38,520 Esa es la constante de tiempo. 203 00:09:38,520 --> 00:09:39,900 Pero es difícil encontrar un valor. 204 00:09:39,900 --> 00:09:43,060 Si usted está tratando de preguntar, Son las siete de mi lista? 205 00:09:43,060 --> 00:09:44,740 Tienes que ir a través de cada valor individual. 206 00:09:44,740 --> 00:09:45,680 ¿Es esto siete? 207 00:09:45,680 --> 00:09:46,610 ¿Es esto siete? 208 00:09:46,610 --> 00:09:47,770 ¿Es esto siete? 209 00:09:47,770 --> 00:09:48,690 ¿Es esto siete? 210 00:09:48,690 --> 00:09:49,830 Una y otra vez. 211 00:09:49,830 --> 00:09:51,520 Y es O (n). 212 00:09:51,520 --> 00:09:53,800 Así que la hora de estudiar para el examen, Comparar esto con matrices. 213 00:09:53,800 --> 00:09:57,010 214 00:09:57,010 --> 00:09:58,220 >> ¿Está bien? 215 00:09:58,220 --> 00:09:59,220 Se apagaron las luces tenues. 216 00:09:59,220 --> 00:10:01,110 Aceptar. 217 00:10:01,110 --> 00:10:02,400 ¿Cuándo es mejor una lista enlazada? 218 00:10:02,400 --> 00:10:04,640 Cuando es un arreglo mejor? 219 00:10:04,640 --> 00:10:06,670 Así que echemos un vistazo a algo de código. 220 00:10:06,670 --> 00:10:08,960 Aquí es un nodo potencial. 221 00:10:08,960 --> 00:10:09,770 Es una estructura. 222 00:10:09,770 --> 00:10:12,220 Tiene un int n, que será nuestro valor. 223 00:10:12,220 --> 00:10:17,780 Y tiene un nodo struct * siguiente, que es nuestra puntero al siguiente nodo. 224 00:10:17,780 --> 00:10:23,040 Así que aquí, podemos ver que nos pasó haber puesto un int en nuestro nodo. 225 00:10:23,040 --> 00:10:27,850 Pero si esto fuera una lista enlazada de caracteres estrellas o una lista enlazada de carrozas, que 226 00:10:27,850 --> 00:10:28,820 totalmente podría hacer eso también. 227 00:10:28,820 --> 00:10:33,110 >> Recuerde que en pset6, probablemente tuvo una lista enlazada de estrellas CHAR o sólo 228 00:10:33,110 --> 00:10:34,360 arrays static char. 229 00:10:34,360 --> 00:10:37,370 230 00:10:37,370 --> 00:10:39,040 Vamos a ver aquí en una operación. 231 00:10:39,040 --> 00:10:43,570 Así que queremos insertar un nuevo n en nuestra lista enlazada. 232 00:10:43,570 --> 00:10:48,940 Empezamos con un puntero cabeza que es un puntero a este nodo que tiene el 233 00:10:48,940 --> 00:10:53,460 valor de n y un lado de un puntero que puntos a este nodo es un valor de 234 00:10:53,460 --> 00:10:57,760 n y una siguiente de nulo, porque que es el último nodo. 235 00:10:57,760 --> 00:11:00,440 Así que, en aras del tiempo, lo haré poner todo el código en la pantalla. 236 00:11:00,440 --> 00:11:03,130 Y vamos a caminar a través de él unas pocas líneas a la vez. 237 00:11:03,130 --> 00:11:05,790 >> Así que aquí está el código. 238 00:11:05,790 --> 00:11:07,560 Espero que sea legible. 239 00:11:07,560 --> 00:11:11,275 Lo primero que hacemos es que malloc un nuevo nodo. 240 00:11:11,275 --> 00:11:15,105 Así que tiene un puntero a un nuevo nodo que no tienen absolutamente nada establecido 241 00:11:15,105 --> 00:11:16,450 en ella todavía. 242 00:11:16,450 --> 00:11:19,580 Verificamos para asegurarse de que el nuevo nodo no es nulo. 243 00:11:19,580 --> 00:11:22,220 De lo contrario, hay que darse por vencido. 244 00:11:22,220 --> 00:11:27,680 Así que después de haber comprobado que, ahora establecer los valores en el nodo. 245 00:11:27,680 --> 00:11:31,520 Por eso, pusimos el nuevo n en nuestro campo n. 246 00:11:31,520 --> 00:11:36,050 Y ponemos el siguiente puntero para apuntar a la cabeza original, por lo que podemos 247 00:11:36,050 --> 00:11:38,900 ahora han introducido este nodo a nuestra lista. 248 00:11:38,900 --> 00:11:44,600 >> Por último, tenemos el punto de jefe global a nuestro nuevo nodo, por lo que si tuviéramos que 249 00:11:44,600 --> 00:11:50,300 comenzar en la cabeza, estaríamos en este nuevo primer nodo en lugar de 250 00:11:50,300 --> 00:11:51,560 el antiguo primer nodo. 251 00:11:51,560 --> 00:11:55,320 Y cuando sale de esta función, el nuevo nodo de variable de ya no existe, 252 00:11:55,320 --> 00:11:57,130 porque era local a la función. 253 00:11:57,130 --> 00:11:59,770 Así que este es el estado del mundo. 254 00:11:59,770 --> 00:12:03,570 Nuestro jefe global apunta a nuestro nuevo primer nodo, lo que apunta a nuestra 255 00:12:03,570 --> 00:12:06,346 primer nodo original, donde los puntos al nodo después de eso. 256 00:12:06,346 --> 00:12:09,790 >> Esa fue la inserción. 257 00:12:09,790 --> 00:12:12,150 Espero que haya sido relativamente fácil de seguir. 258 00:12:12,150 --> 00:12:14,300 En caso de duda, hacer un dibujo. 259 00:12:14,300 --> 00:12:17,820 Así que me parece que hablar de listas enlazadas y mirando 260 00:12:17,820 --> 00:12:19,870 código es muy útil no. 261 00:12:19,870 --> 00:12:23,790 Mientras mira una foto de un vinculado lista me permite pensar, oh, tan 262 00:12:23,790 --> 00:12:24,970 Tengo este nodo aquí. 263 00:12:24,970 --> 00:12:28,980 Pero si actualizo ese puntero, termina desconectado. 264 00:12:28,980 --> 00:12:34,340 Y me he olvidado de donde el nodo va. 265 00:12:34,340 --> 00:12:35,390 Y el código sale. 266 00:12:35,390 --> 00:12:37,830 Y tiene varios nodos que están desconectados. 267 00:12:37,830 --> 00:12:39,970 Y no termina con la lista que desee. 268 00:12:39,970 --> 00:12:43,320 >> Así que si usted dibuja la imagen y lo hace paso a paso, con suerte, podrá ver 269 00:12:43,320 --> 00:12:46,840 el orden correcto de las cosas en términos de la actualización de los indicadores para asegurarse 270 00:12:46,840 --> 00:12:48,830 que la lista se une. 271 00:12:48,830 --> 00:12:51,240 Insertar es relativamente sencillo. 272 00:12:51,240 --> 00:12:55,210 Un uno más complicado sería inserción en una lista ordenada. 273 00:12:55,210 --> 00:12:59,980 Una función más complicado es eliminar y encontrar, por lo que mira a través de una lista de 274 00:12:59,980 --> 00:13:03,030 ver si hay algo allí. 275 00:13:03,030 --> 00:13:07,220 Tal vez has hecho esto pset6 cuando tiene en su tabla hash y dijiste: 276 00:13:07,220 --> 00:13:10,460 así, es la palabra manzana en mi lista enlazada? 277 00:13:10,460 --> 00:13:11,440 >> Así que es posible que ya haya hecho esto. 278 00:13:11,440 --> 00:13:15,530 Pero sin duda, refrescar la memoria y tratar de volver a implementar hallazgo y 279 00:13:15,530 --> 00:13:19,150 reimplementar borrar de una lista enlazada. 280 00:13:19,150 --> 00:13:22,850 Diversión nota al margen, no vinculados doblemente también listas, donde se tiene 281 00:13:22,850 --> 00:13:27,490 punteros que apuntan tanto hacia adelante como hacia atrás, de modo que usted puede ir a la 282 00:13:27,490 --> 00:13:29,270 siguiente nodo y para el nodo anterior. 283 00:13:29,270 --> 00:13:33,860 Y hubo una pregunta sobre el año pasado cuestionario de ese tipo, hablando 284 00:13:33,860 --> 00:13:36,190 listas sobre ligada doblemente. 285 00:13:36,190 --> 00:13:40,070 >> Ahora, eso es una estructura que eres relativamente familiarizados, ya que la mayoría 286 00:13:40,070 --> 00:13:42,520 de ustedes probablemente ellos utilizado en pset6. 287 00:13:42,520 --> 00:13:45,680 Aquí hay uno que es un poco menos familiar. 288 00:13:45,680 --> 00:13:51,020 Como nota al margen, creo que la prueba 1 es principalmente más duro que el Cuestionario 0, porque 289 00:13:51,020 --> 00:13:54,600 las cosas que estás haciendo, no han hecho lo mismo. 290 00:13:54,600 --> 00:13:58,100 Para ponerlo de otra forma, para la Prueba 0, hubiera escrito una gran cantidad de C. Y 291 00:13:58,100 --> 00:13:58,880 le preguntó sobre C. 292 00:13:58,880 --> 00:14:02,310 >> Para la prueba 1, vamos a preguntarle acerca de PHP y JavaScript, que se 293 00:14:02,310 --> 00:14:03,490 no haber escrito la mayor cantidad de. 294 00:14:03,490 --> 00:14:07,590 Vamos a preguntarle acerca de C-código que usted no ha escrito la mayor cantidad de, 295 00:14:07,590 --> 00:14:09,130 esta cosas avanzadas C. 296 00:14:09,130 --> 00:14:11,520 Así que definitivamente, la práctica de la que la materia hablado en la conferencia que 297 00:14:11,520 --> 00:14:15,260 no necesariamente hacer en el conjunto de problemas. 298 00:14:15,260 --> 00:14:17,870 >> Hablando de eso, usted no ha escrito una pila en un problema establecido. 299 00:14:17,870 --> 00:14:19,610 Pero fue en la conferencia. 300 00:14:19,610 --> 00:14:22,530 Aquí está la imagen de alto nivel de Pilas que mostramos todos los años. 301 00:14:22,530 --> 00:14:26,180 Es la pila de bandejas en el comedor Mather. 302 00:14:26,180 --> 00:14:30,570 A un alto nivel, las pilas son un último in, first out estructura de datos. 303 00:14:30,570 --> 00:14:32,040 Eso significa que usted va para poner las cosas en - 304 00:14:32,040 --> 00:14:36,400 1, 3, 7, 12, 14, 0 negativo. 305 00:14:36,400 --> 00:14:39,180 La única cosa que no podía tener dijo - negativo 3, 0. 306 00:14:39,180 --> 00:14:40,250 Usted pone todas estas cosas pulg 307 00:14:40,250 --> 00:14:42,940 Y la última que se introdujo en el primer uno que va a salir. 308 00:14:42,940 --> 00:14:44,170 >> Así que hay dos operaciones - 309 00:14:44,170 --> 00:14:45,260 insertar y extraer. 310 00:14:45,260 --> 00:14:49,180 Toda la puesta en que yo era haciendo un gesto como éste son de empuje. 311 00:14:49,180 --> 00:14:52,020 Y luego cuando llego a agarrar algo o alcanzar en la parte superior para agarrar 312 00:14:52,020 --> 00:14:53,940 algo, eso es pop. 313 00:14:53,940 --> 00:14:55,540 Así que vamos a poner en práctica las pilas. 314 00:14:55,540 --> 00:14:57,870 Y nosotros les mostramos en la conferencia utilizando matrices. 315 00:14:57,870 --> 00:14:59,550 Pero podrías hacerlas utilizar listas enlazadas. 316 00:14:59,550 --> 00:15:01,770 Una pila es un conceptual de datos estructura, no como un 317 00:15:01,770 --> 00:15:03,760 uno específico de la implementación. 318 00:15:03,760 --> 00:15:06,420 >> Entonces, ¿qué sería eso? 319 00:15:06,420 --> 00:15:07,970 Se vería algo así como esto. 320 00:15:07,970 --> 00:15:10,840 Usted tendría un tamaño entero. 321 00:15:10,840 --> 00:15:16,000 Y usted tiene una matriz de valores que estamos llamando bandejas, porque eso es 322 00:15:16,000 --> 00:15:18,570 lo que era la imagen de nosotros - INT bandejas - 323 00:15:18,570 --> 00:15:21,740 y algo más de la capacidad máxima. 324 00:15:21,740 --> 00:15:27,100 Así que lo empujaría parece? 325 00:15:27,100 --> 00:15:33,250 Bueno, si tenemos un s pila, luego de empujar algo en s, obtendríamos 326 00:15:33,250 --> 00:15:34,620 el tamaño de s. 327 00:15:34,620 --> 00:15:42,270 Y eso sería la siguiente lugar abierto de nuestra matriz. 328 00:15:42,270 --> 00:15:50,510 Así que si tenemos tres cosas en nuestra pila, a continuación, las bandejas 3 sería el siguiente 329 00:15:50,510 --> 00:15:54,290 lugar abierto, ya que 0, 1, y 2 ya están llenos. 330 00:15:54,290 --> 00:16:01,790 >> Así que ponemos el valor en s.trays [s.size], el tercer lugar. 331 00:16:01,790 --> 00:16:06,290 Y luego incrementamos s.size decir, bueno, tuvimos tres cosas antes. 332 00:16:06,290 --> 00:16:07,400 Ahora, tenemos cuatro. 333 00:16:07,400 --> 00:16:10,180 Así que la próxima vez que presione, eres va a poner algo en 4. 334 00:16:10,180 --> 00:16:15,560 O la próxima vez que usted hace estallar, usted va mirar a las 3 en lugar de 4 o lo que sea. 335 00:16:15,560 --> 00:16:18,000 Y luego vamos a volver a la verdadera digamos, bueno, lo hemos conseguido. 336 00:16:18,000 --> 00:16:19,160 Esto funcionó. 337 00:16:19,160 --> 00:16:22,060 Como regla general, si una función que es debe retornar true o 338 00:16:22,060 --> 00:16:26,370 falsa siempre devuelve true, es posible que han hecho algo mal. 339 00:16:26,370 --> 00:16:28,350 Así funciona esto? 340 00:16:28,350 --> 00:16:32,400 >> Bueno, funciona muy bien para 1, y 2, y 3, y 4, y cinco. 341 00:16:32,400 --> 00:16:34,640 Pero digamos que llego a mi capacidad. 342 00:16:34,640 --> 00:16:38,750 Entonces me he encontrado con un problema, porque si el tamaño es el mismo que la capacidad, estoy 343 00:16:38,750 --> 00:16:43,340 ahora tratando de poner algo en un matriz en la que no tengo espacio. 344 00:16:43,340 --> 00:16:46,980 Así que un corto de verificación para solucionar este problema. 345 00:16:46,980 --> 00:16:51,630 Si s.size CAPACIDAD ==, devolverá false. 346 00:16:51,630 --> 00:16:54,130 De lo contrario, vamos y hacemos lo que hicimos. 347 00:16:54,130 --> 00:16:55,660 ¿Qué más se puede pedir acerca de las pilas? 348 00:16:55,660 --> 00:16:56,460 ¿Qué más debe estudiar? 349 00:16:56,460 --> 00:16:57,690 ¿Qué más debe practicar? 350 00:16:57,690 --> 00:17:01,030 >> Pues bien, la aplicación de pop. 351 00:17:01,030 --> 00:17:02,370 Ya lo hicimos empujón. 352 00:17:02,370 --> 00:17:04,280 Voy a arreglar eso. 353 00:17:04,280 --> 00:17:08,180 Una aplicación no matriz, donde se utiliza una lista enlazada, tal vez. 354 00:17:08,180 --> 00:17:09,390 Una aplicación no int. 355 00:17:09,390 --> 00:17:10,940 Hicimos ints aquí. 356 00:17:10,940 --> 00:17:11,880 Pero podría haber sido carrozas. 357 00:17:11,880 --> 00:17:13,010 Yo podría haber sido cadenas. 358 00:17:13,010 --> 00:17:14,290 Podría haber sido estrellas carac. 359 00:17:14,290 --> 00:17:17,960 Mira concursos anteriores para los tipos de preguntas que le hemos pedido sobre las pilas. 360 00:17:17,960 --> 00:17:20,000 >> Voy a decir que hemos cubierto montones alrededor lo mismo que nosotros les hemos cubierto en 361 00:17:20,000 --> 00:17:20,540 año pasado. 362 00:17:20,540 --> 00:17:24,400 Así que las preguntas del cuestionario deben ser una buena indicación. 363 00:17:24,400 --> 00:17:27,010 Avanzando aún más rápido, las colas. 364 00:17:27,010 --> 00:17:28,200 Son como las pilas. 365 00:17:28,200 --> 00:17:29,960 Pero son primero en entrar, primero en salir. 366 00:17:29,960 --> 00:17:33,530 Si usted es británico, cola de la palabra probablemente hecho un montón de sentido para usted. 367 00:17:33,530 --> 00:17:36,390 De lo contrario, es posible que tenga oído hablar de él como una línea. 368 00:17:36,390 --> 00:17:38,120 Funcionan como la línea en la tienda de Apple. 369 00:17:38,120 --> 00:17:40,740 La primera persona a presentarse a las 3:00 por la mañana es el primer 370 00:17:40,740 --> 00:17:42,880 persona para comprar su iPad. 371 00:17:42,880 --> 00:17:44,260 >> Así que tenemos dos operaciones - 372 00:17:44,260 --> 00:17:45,720 enqueue y quitar de la cola. 373 00:17:45,720 --> 00:17:47,560 Enqueue pone a alguien en la línea. 374 00:17:47,560 --> 00:17:50,070 Quitar de la cola tira de la primera persona fuera de la línea. 375 00:17:50,070 --> 00:17:52,640 Una vez más, podemos implementar esto con una matriz. 376 00:17:52,640 --> 00:17:54,880 Entonces, ¿cuál es la estructura que mostró en la conferencia? 377 00:17:54,880 --> 00:17:57,660 Era éste. 378 00:17:57,660 --> 00:17:59,300 Una vez más, los números. 379 00:17:59,300 --> 00:18:02,020 Una vez más, el tamaño y este nuevo frente cosa. 380 00:18:02,020 --> 00:18:04,880 ¿Por qué existe algo que se llama frente? 381 00:18:04,880 --> 00:18:07,050 Es el índice del siguiente elemento para quitar de la cola. 382 00:18:07,050 --> 00:18:12,210 Es sólo mantener internamente un registro de el primer hombre en aparecer, por lo que 383 00:18:12,210 --> 00:18:15,005 puede sacarlo cuando lo necesitamos. 384 00:18:15,005 --> 00:18:19,322 >> Definitivamente mirar las notas de clase y tratar de para implementar y poner en cola dequeue 385 00:18:19,322 --> 00:18:21,700 la hora de estudiar para el examen. 386 00:18:21,700 --> 00:18:23,190 Aspectos importantes en las que pensar. 387 00:18:23,190 --> 00:18:27,260 Envolver en torno a si la parte delantera, más la tamaño termina más grande que la capacidad. 388 00:18:27,260 --> 00:18:32,670 Una vez más, si su estructura está llena, usted va a tener un problema. 389 00:18:32,670 --> 00:18:34,780 Hash tablas que has visto antes. 390 00:18:34,780 --> 00:18:39,820 La mayoría de ustedes probablemente implementado estos en pset6. 391 00:18:39,820 --> 00:18:44,210 Es una estructura que se propone para el O (1) inserción constante de tiempo y O (1) 392 00:18:44,210 --> 00:18:46,430 búsqueda constante de tiempo. 393 00:18:46,430 --> 00:18:49,760 >> En CS50, implementamos esto como una serie de listas enlazadas. 394 00:18:49,760 --> 00:18:53,690 El componente clave de una tabla hash es la función hash. 395 00:18:53,690 --> 00:18:58,350 Por lo que convierte su entrada, digamos, una palabra del diccionario, en un número, 396 00:18:58,350 --> 00:18:59,560 que va a ser nuestro índice. 397 00:18:59,560 --> 00:19:01,410 Y vamos a utilizar ese índice en nuestra matriz. 398 00:19:01,410 --> 00:19:05,374 Así que aquí está una imagen poco lindo desde study.50.net. 399 00:19:05,374 --> 00:19:08,060 Nos tiramos todas las palabras en nuestra función hash. 400 00:19:08,060 --> 00:19:10,950 Y la función de dispersión nos dice dónde poner estas palabras. 401 00:19:10,950 --> 00:19:15,650 >> Esto es todo lo grande en la tierra donde sólo hay una palabra para cada ranura. 402 00:19:15,650 --> 00:19:20,480 Pero a medida que usted recuerda de pset6, hay son más palabras que las franjas horarias. 403 00:19:20,480 --> 00:19:23,080 Entonces, ¿qué sucede cuando se obtener una colisión? 404 00:19:23,080 --> 00:19:26,730 En lugar de almacenar un valor en, digamos, tabla hash 3, que 405 00:19:26,730 --> 00:19:27,990 almacenar una lista enlazada. 406 00:19:27,990 --> 00:19:32,900 Y así, en lugar de tener el melón aquí, usted tendría una lista enlazada, 407 00:19:32,900 --> 00:19:34,190 donde el primer nodo es el melón. 408 00:19:34,190 --> 00:19:35,260 Y el siguiente nodo es el gato. 409 00:19:35,260 --> 00:19:38,970 Y el tercer nodo es de colisión, vamos a decir, porque todas estas palabras comienzan 410 00:19:38,970 --> 00:19:41,110 con C. 411 00:19:41,110 --> 00:19:42,700 >> Así que la mayoría de ustedes lo hicieron esto para pset6. 412 00:19:42,700 --> 00:19:45,685 Si no hiciste una tabla hash en pset6 y que ha intentado algo así como 413 00:19:45,685 --> 00:19:47,720 un trie, sin duda revisar las tablas hash. 414 00:19:47,720 --> 00:19:50,650 Si lo hiciste en pset6, definitivamente revisar las tablas hash. 415 00:19:50,650 --> 00:19:53,610 Y si lo hiciste a pset6 y no lo hizo trabajar del todo bien y usted 416 00:19:53,610 --> 00:19:56,150 tenía un montón de problemas con él, sin duda revisar las tablas hash. 417 00:19:56,150 --> 00:20:01,610 Así que la lección de verdad es, sin duda revisar las tablas hash. 418 00:20:01,610 --> 00:20:07,130 >> La inmensa minoría de los que trató cabo trata sobre pset6. 419 00:20:07,130 --> 00:20:08,570 Imagen de alto nivel. 420 00:20:08,570 --> 00:20:15,150 Es algo como esto, donde cada nodo tiene un conjunto de niños, donde cada 421 00:20:15,150 --> 00:20:17,100 niño corresponde a una letra. 422 00:20:17,100 --> 00:20:20,520 Y cada nodo también dice, bueno, yo soy una palabra. 423 00:20:20,520 --> 00:20:25,933 Así que en este ejemplo, la palabra Maxwell, si se sigue la M a la A a la 424 00:20:25,933 --> 00:20:28,530 X-W-E-L-L y luego seguir una más. 425 00:20:28,530 --> 00:20:32,800 Además, disfrutarás de este símbolo, delta, que significamos en el sentido de que es una palabra. 426 00:20:32,800 --> 00:20:34,780 Así que Maxwell es una palabra. 427 00:20:34,780 --> 00:20:38,430 Estos deltas son en todo significante qué cosas son las palabras y lo que 428 00:20:38,430 --> 00:20:40,360 las cosas no son. 429 00:20:40,360 --> 00:20:46,400 >> Así que en pset6, los datos que almacena junto con cualquiera de nuestros nodos era "Yo soy un 430 00:20:46,400 --> 00:20:52,630 palabra. "Y lo bueno de tries se demuestran la inserción y 431 00:20:52,630 --> 00:20:55,080 las operaciones de búsqueda en tiempo O (longitud de una palabra). 432 00:20:55,080 --> 00:20:59,450 Así que para conseguir a través de Maxwell, es M-A-X-W-E-L-L. Así que siete u ocho años - 433 00:20:59,450 --> 00:21:00,360 No puedo contar - 434 00:21:00,360 --> 00:21:03,920 pasos para llegar a la final y comprobar las cosas. 435 00:21:03,920 --> 00:21:06,800 Así aplicación rápida aquí. 436 00:21:06,800 --> 00:21:10,230 Rob pasó por una vinculada enumerar en su postmortem. 437 00:21:10,230 --> 00:21:11,600 A fin de comprobar que fuera. 438 00:21:11,600 --> 00:21:11,720 Lo siento. 439 00:21:11,720 --> 00:21:13,240 Fue a través de un trie en su postmortem. 440 00:21:13,240 --> 00:21:14,260 A fin de comprobar que fuera. 441 00:21:14,260 --> 00:21:24,410 >> Pero, básicamente, que cada nodo tiene 27 punteros a los siguientes nodos y uno 442 00:21:24,410 --> 00:21:27,050 Boolean estoy yo una palabra. 443 00:21:27,050 --> 00:21:31,530 Echa un vistazo a postmortem de Rob como la forma en esto realmente se lleva a cabo. 444 00:21:31,530 --> 00:21:34,750 Nuestra estructura final, nuestros árboles y árboles binarios de búsqueda. 445 00:21:34,750 --> 00:21:41,530 Así que mirando estos, estos fueron cubiertos más recientemente la semana 8, el lunes. 446 00:21:41,530 --> 00:21:46,960 Un árbol es similar a un trie, salvo que no necesariamente tienen 27 nodos en 447 00:21:46,960 --> 00:21:47,500 cada punto. 448 00:21:47,500 --> 00:21:52,820 Y usted no tiene estos datos en cada paso que significa si el - 449 00:21:52,820 --> 00:21:54,030 el camino no importa. 450 00:21:54,030 --> 00:22:00,870 Mientras que un trie, el camino de arriba a inferior, Maxwell, era importante para nosotros. 451 00:22:00,870 --> 00:22:05,270 >> Sin embargo, cada nodo tiene múltiples los niños, tal vez. 452 00:22:05,270 --> 00:22:07,290 Tenemos un poco más de vocabulario. 453 00:22:07,290 --> 00:22:09,530 La raíz del árbol que está en la parte superior. 454 00:22:09,530 --> 00:22:12,520 Y decimos que el situado más abajo nodos que no tienen 455 00:22:12,520 --> 00:22:14,530 los niños son las hojas. 456 00:22:14,530 --> 00:22:18,040 Así como un trie, un árbol es una estructura de nodos. 457 00:22:18,040 --> 00:22:21,490 Un tipo común de árbol que vamos hablar es de un árbol binario, en donde 458 00:22:21,490 --> 00:22:26,040 cada nodo no tiene hijos o un niño o dos niños. 459 00:22:26,040 --> 00:22:28,890 Así que la imagen aquí no es un árbol binario, porque 460 00:22:28,890 --> 00:22:32,890 nodo 3 tiene tres hijos. 461 00:22:32,890 --> 00:22:38,140 >> Pero si tuviéramos que hacer caso omiso de ellos, el resto de que es un árbol binario, ya que 462 00:22:38,140 --> 00:22:43,200 demuestra la propiedad de que cada nodo tiene cero, uno o dos hijos. 463 00:22:43,200 --> 00:22:46,400 Entonces, ¿cómo podríamos expresar esto en código? 464 00:22:46,400 --> 00:22:51,460 Podríamos tener un nodo en el que cada nodo tiene un número entero dentro de ella, así 465 00:22:51,460 --> 00:22:55,590 como un puntero al árbol de la izquierda y un puntero al árbol en el 466 00:22:55,590 --> 00:22:59,510 derecho, por lo que los dos niños. 467 00:22:59,510 --> 00:23:00,880 ¿Cómo es esto útil? 468 00:23:00,880 --> 00:23:05,740 Bueno, si hacemos reglas sobre dónde estamos poner nodos, podemos hacer la búsqueda más rápida. 469 00:23:05,740 --> 00:23:10,630 >> Así que hay un concepto de una búsqueda binaria árbol, donde todos los nodos en la 470 00:23:10,630 --> 00:23:14,420 subárbol izquierdo tiene un valor menor que el nodo que estamos viendo. 471 00:23:14,420 --> 00:23:17,880 Y todos los nodos en el subárbol derecho tener un valor mayor 472 00:23:17,880 --> 00:23:18,660 que el nodo raíz. 473 00:23:18,660 --> 00:23:20,670 Ahora, que se parece a un montón de palabras. 474 00:23:20,670 --> 00:23:23,770 Voy a ponerlo en el interior de la doble citas y mostrar una imagen. 475 00:23:23,770 --> 00:23:27,010 Así que aquí es un ejemplo de un árbol de búsqueda binaria. 476 00:23:27,010 --> 00:23:28,770 Vemos que empezamos con 10. 477 00:23:28,770 --> 00:23:31,780 Todo a la izquierda de 10 es menor que ella. 478 00:23:31,780 --> 00:23:33,130 Y todo a la derecha es más grande que él. 479 00:23:33,130 --> 00:23:37,620 >> Pero más que eso, cada nodo el árbol expresa esta propiedad. 480 00:23:37,620 --> 00:23:42,110 Por lo tanto el nodo 7 tiene un 3 a la a la izquierda y 9 a la derecha. 481 00:23:42,110 --> 00:23:44,440 Así que todos los que son más pequeños que 10. 482 00:23:44,440 --> 00:23:50,470 Sin embargo, mirando sólo a los que, el 7 tiene 3 a su izquierda y 9 a la derecha. 483 00:23:50,470 --> 00:23:56,100 Y del mismo modo a la derecha, 15 tiene 14 a su izquierda y 50 a la derecha. 484 00:23:56,100 --> 00:24:03,770 Así que los tres nodos de allá, 15, 14, y 50, son también un árbol binario válido 485 00:24:03,770 --> 00:24:05,480 o un árbol de búsqueda binaria válida. 486 00:24:05,480 --> 00:24:07,250 Y todos son mayores de 10. 487 00:24:07,250 --> 00:24:08,960 Así que se les permita ser a la derecha allí. 488 00:24:08,960 --> 00:24:09,940 ¿Hay alguna pregunta? 489 00:24:09,940 --> 00:24:12,580 >> AUDIENCIA: ¿Cómo hacer frente al usted tiene dos sietes? 490 00:24:12,580 --> 00:24:12,850 >> R.J. AQUINO: Si. 491 00:24:12,850 --> 00:24:16,550 ¿Cómo lidiar con dos valores que son los mismos? 492 00:24:16,550 --> 00:24:21,465 Algunos árboles binarios de búsqueda dicen que ignorar los duplicados, porque el objetivo es 493 00:24:21,465 --> 00:24:24,280 sólo para decir, he visto estas cosas hasta ahora. 494 00:24:24,280 --> 00:24:28,120 Algunos árboles de búsqueda binarios se podría decir tener un recuento dentro del nodo. 495 00:24:28,120 --> 00:24:32,000 Otros podrían decir que todo lo que la izquierda es menor que o igual a. 496 00:24:32,000 --> 00:24:33,470 Y todo a la derecha es mayor que. 497 00:24:33,470 --> 00:24:36,520 >> Sólo depende de lo que el problema es que se está resolviendo. 498 00:24:36,520 --> 00:24:40,840 Así que en un diccionario, por ejemplo, usted no se preocupan por los duplicados. 499 00:24:40,840 --> 00:24:41,490 Se podría tirarlas. 500 00:24:41,490 --> 00:24:44,719 Pero algún otro problema que podría cuidar. 501 00:24:44,719 --> 00:24:49,242 >> AUDIENCIA: ¿Es posible tener un 1 a la izquierda de 15, el cual 502 00:24:49,242 --> 00:24:50,590 es menor que 10? 503 00:24:50,590 --> 00:24:51,885 >> R.J. AQUINO: No. 504 00:24:51,885 --> 00:24:56,570 Si el 14 aquí eran un 1, ello no ser un árbol binario de búsqueda válido, 505 00:24:56,570 --> 00:25:00,840 porque todo a la derecha del 10 tiene que ser más grande que él. 506 00:25:00,840 --> 00:25:02,300 Y vamos a ver por qué. 507 00:25:02,300 --> 00:25:07,960 Si en la tierra de la búsqueda mi objetivo es encontrar 14, comienzo en la raíz. 508 00:25:07,960 --> 00:25:08,500 Así que me veo. 509 00:25:08,500 --> 00:25:08,710 Aceptar. 510 00:25:08,710 --> 00:25:10,670 Vamos a empezar en la raíz. 511 00:25:10,670 --> 00:25:12,500 Mira 10. 512 00:25:12,500 --> 00:25:16,050 >> Bueno, 14, nuestro objetivo, es más grande que 10. 513 00:25:16,050 --> 00:25:17,370 Así que debe ser a la derecha. 514 00:25:17,370 --> 00:25:21,780 Esto es muy similar a todo el teléfono Lo del libro que hicimos, el binario 515 00:25:21,780 --> 00:25:23,720 buscar allí. 516 00:25:23,720 --> 00:25:26,430 Pero en lugar de la búsqueda binaria en una matriz, estamos binario 517 00:25:26,430 --> 00:25:28,490 búsqueda en este árbol. 518 00:25:28,490 --> 00:25:31,260 Así que todavía estamos buscando a 14. 519 00:25:31,260 --> 00:25:32,480 Bueno, 14 es menor que 15. 520 00:25:32,480 --> 00:25:36,430 Así que si está en nuestro árbol, debe estar en esta zona de aquí. 521 00:25:36,430 --> 00:25:39,680 Debe estar a la derecha del 10 y a la izquierda de 15. 522 00:25:39,680 --> 00:25:42,250 >> Y así, comprobamos este nodo. 523 00:25:42,250 --> 00:25:45,790 Y yay, hemos encontrado 14. 524 00:25:45,790 --> 00:25:46,760 Yo no voy a caminar a través de él. 525 00:25:46,760 --> 00:25:48,090 Pero aquí está el código. 526 00:25:48,090 --> 00:25:49,690 De hecho, es relativamente sencillo, 527 00:25:49,690 --> 00:25:52,630 porque esto es recursivo. 528 00:25:52,630 --> 00:25:55,420 ¿Qué podríamos pedirte que hagas en un concurso? 529 00:25:55,420 --> 00:25:57,000 Podríamos pedirle que escriba este código. 530 00:25:57,000 --> 00:25:59,170 Podríamos pedirle que mire este código y modificar el código y explicar lo 531 00:25:59,170 --> 00:26:00,210 que está haciendo. 532 00:26:00,210 --> 00:26:00,390 Sí. 533 00:26:00,390 --> 00:26:00,770 Consulta? 534 00:26:00,770 --> 00:26:04,240 >> AUDIENCIA: ¿Son estas diapositivas van a ser puesto a disposición como estaban la última vez? 535 00:26:04,240 --> 00:26:04,740 >> R.J. AQUINO: Si. 536 00:26:04,740 --> 00:26:06,460 Así que estas diapositivas definitivamente ser publicado. 537 00:26:06,460 --> 00:26:08,640 >> AUDIENCIA: En realidad se publiquen en este momento en la página web. 538 00:26:08,640 --> 00:26:10,020 David acaba de hacer eso. 539 00:26:10,020 --> 00:26:12,720 >> R.J. AQUINO: Los toboganes son en este momento en la página web. 540 00:26:12,720 --> 00:26:16,420 Probablemente voy a remendar un par de los typos me señalaron y arreglarlos. 541 00:26:16,420 --> 00:26:19,940 Pero hay una corriente versión en el sitio. 542 00:26:19,940 --> 00:26:21,820 Otros cosas que podríamos pedirte que hagas - 543 00:26:21,820 --> 00:26:23,790 escribir inserción. 544 00:26:23,790 --> 00:26:27,490 Escribir una versión iterativa del función recursiva que sólo te mostró 545 00:26:27,490 --> 00:26:32,520 o hablar de estas cosas, como en párrafos, en palabras, en frases. 546 00:26:32,520 --> 00:26:35,760 La comparación de los tiempos de ejecución y explicar lo que se desea utilizar un binario 547 00:26:35,760 --> 00:26:39,200 árbol de búsqueda en lugar de una la tabla de hash, por ejemplo. 548 00:26:39,200 --> 00:26:43,580 >> Así entender estas estructuras a un nivel muy profundo. 549 00:26:43,580 --> 00:26:47,440 Entender cómo escribir, cómo utilizarlos, cómo hablar de ellos. 550 00:26:47,440 --> 00:26:50,270 Y usted estará todo listo. 551 00:26:50,270 --> 00:26:50,630 Consulta? 552 00:26:50,630 --> 00:26:55,070 >> AUDIENCIA: Cuando se está escribiendo el árbol binario de búsqueda, ¿cómo 553 00:26:55,070 --> 00:27:01,460 determinar qué valor que sea como la raíz? 554 00:27:01,460 --> 00:27:06,120 >> R.J. AQUINO: Así que la pregunta era: ¿qué valor Cómo se hace como la raíz? 555 00:27:06,120 --> 00:27:08,760 Dependiendo de su código, puede tener una raíz global. 556 00:27:08,760 --> 00:27:14,290 Así que usted puede haber tenido probablemente en pset6 una tabla hash global. 557 00:27:14,290 --> 00:27:18,640 O se puede desmayar la raíz como argumento. 558 00:27:18,640 --> 00:27:23,810 Así que esta función de búsqueda aquí toma un argumento un nodo *. 559 00:27:23,810 --> 00:27:27,420 Y así lo nodo que resultan ser mirando es el que usted está tratando 560 00:27:27,420 --> 00:27:31,510 como su raíz cuando se pasa pulg 561 00:27:31,510 --> 00:27:32,320 Y estoy listo. 562 00:27:32,320 --> 00:27:33,480 Esos son mis diapositivas. 563 00:27:33,480 --> 00:27:35,940 La siguiente persona puede venir de intercambio en un ordenador portátil y micrófono. 564 00:27:35,940 --> 00:27:47,390 565 00:27:47,390 --> 00:27:49,760 >> ROB BOWDEN: Creo que podría tener interpretado esa pregunta de manera diferente. 566 00:27:49,760 --> 00:27:53,826 Pero yo interpretado como, si usted tiene los números 1, 2, y 3, ¿cómo 567 00:27:53,826 --> 00:27:56,720 saber para hacer 2 la raíz en lugar de 1 o 3? 568 00:27:56,720 --> 00:27:59,480 Si hacemos 2 la raíz, entonces es muy bien 1 y 3 a la izquierda y derecha. 569 00:27:59,480 --> 00:28:04,610 Pero si 1 es la raíz, entonces es 1 a la superior, 2 derecha, 3 a la derecha. 570 00:28:04,610 --> 00:28:10,880 Así que por defecto, usted no sabe qué hacer con la raíz. 571 00:28:10,880 --> 00:28:15,400 Y para cualquier algoritmo que estamos esperando darle, sólo el primero que 572 00:28:15,400 --> 00:28:16,680 inserción sería la raíz. 573 00:28:16,680 --> 00:28:19,890 ¿O te gustaría darle un árbol binario que que ya existe que tiene una raíz. 574 00:28:19,890 --> 00:28:24,760 Pero otros algoritmos tales que existe la raíz se actualizará, por lo que si usted 575 00:28:24,760 --> 00:28:28,370 terminar en la situación en la que es 1, 2, 3, se actualizaría automáticamente a 576 00:28:28,370 --> 00:28:30,900 hacer 2 la nueva raíz, por lo que Es todavía muy bien equilibrado. 577 00:28:30,900 --> 00:28:33,750 578 00:28:33,750 --> 00:28:34,833 >> ANGELA LI: Cool. 579 00:28:34,833 --> 00:28:36,170 Hey, chicos. 580 00:28:36,170 --> 00:28:37,810 Soy Angela. 581 00:28:37,810 --> 00:28:42,490 Y voy a terminar nuestro C y luego ir a algunos de nuestra web 582 00:28:42,490 --> 00:28:43,120 tecnologías - 583 00:28:43,120 --> 00:28:46,570 HTTP, HTML y CSS. 584 00:28:46,570 --> 00:28:49,610 Así que lo primero es búfer ataques de desbordamiento. 585 00:28:49,610 --> 00:28:53,070 Así que echemos un vistazo a este código. 586 00:28:53,070 --> 00:28:54,260 Es bastante simple. 587 00:28:54,260 --> 00:28:55,460 Hay una función foo. 588 00:28:55,460 --> 00:28:56,990 Y no se devuelve nada. 589 00:28:56,990 --> 00:29:00,950 Pero se necesita un puntero a una cadena llamada bar. 590 00:29:00,950 --> 00:29:04,920 >> Y se va a declarar este tampón, que es un carácter 591 00:29:04,920 --> 00:29:07,690 gama que cuenta con 12 ranuras. 592 00:29:07,690 --> 00:29:11,730 Y utiliza memcpy, que es sólo un función que copia de una dirección 593 00:29:11,730 --> 00:29:12,910 en otro. 594 00:29:12,910 --> 00:29:19,400 Así que esto es tratar de copiar en nuestra tampón de lo 595 00:29:19,400 --> 00:29:21,140 bar está señalando. 596 00:29:21,140 --> 00:29:24,640 Así que cualquier idea de lo que está mal con este código? 597 00:29:24,640 --> 00:29:27,568 598 00:29:27,568 --> 00:29:30,830 >> AUDIENCIA: Si la barra es más larga que C, que se sobreponen. 599 00:29:30,830 --> 00:29:31,520 >> ANGELA LI: Sí, exactamente. 600 00:29:31,520 --> 00:29:34,200 No tenemos ninguna garantía de que la barra va a ser inferior a 12. 601 00:29:34,200 --> 00:29:36,080 Acabamos de hacer un número arbitrario 12. 602 00:29:36,080 --> 00:29:38,380 Y nos dijimos, esperemos que nuestra entrada del usuario es menor de 603 00:29:38,380 --> 00:29:40,440 12 caracteres de largo. 604 00:29:40,440 --> 00:29:46,320 Así que en un mundo ideal, si nuestra entrada es siempre como se espera, a continuación, nos pondremos en contacto 605 00:29:46,320 --> 00:29:47,550 algo así como: hola. 606 00:29:47,550 --> 00:29:48,920 Eso es menos de 12 caracteres. 607 00:29:48,920 --> 00:29:51,870 Esto se lee en char c. 608 00:29:51,870 --> 00:29:53,280 Y entonces hacemos algo con él. 609 00:29:53,280 --> 00:29:54,800 En realidad no importa. 610 00:29:54,800 --> 00:29:59,740 >> Pero una persona con malas intenciones puede hacer algo de la misma familia, en el que 611 00:29:59,740 --> 00:30:04,760 nos dará todo lo bar está señalando, que va a apuntar a este enorme variedad 612 00:30:04,760 --> 00:30:06,280 de tan sólo de una. 613 00:30:06,280 --> 00:30:10,680 Y esta es la forma que más de 12. 614 00:30:10,680 --> 00:30:13,830 Así que va a ir hasta el final aquí abajo para que el rendimiento 615 00:30:13,830 --> 00:30:15,420 dirección que solía ser. 616 00:30:15,420 --> 00:30:17,860 Así que digamos que esta función se llama foo. 617 00:30:17,860 --> 00:30:20,970 Quizás foo fue llamado por algún otro función, que fue llamado por el principal. 618 00:30:20,970 --> 00:30:24,890 Así que cuando foo está en ejecución, es necesario saber dónde volver. 619 00:30:24,890 --> 00:30:29,130 >> Si foo fue llamado por alguna función llamada baz, tiene que saber que es 620 00:30:29,130 --> 00:30:30,250 tiene que volver a baz. 621 00:30:30,250 --> 00:30:34,040 Y eso es lo que la dirección del remitente aquí nos está diciendo. 622 00:30:34,040 --> 00:30:38,340 Pero si sobreescribirlo con otro dirección, en este caso, se trata de un 623 00:30:38,340 --> 00:30:42,650 representación de la dirección en el principio de este búfer, entonces 624 00:30:42,650 --> 00:30:45,240 lo que realmente va a suceder es que en lugar de regresar de nuevo a baz, 625 00:30:45,240 --> 00:30:48,470 que llama a nuestra función, es sólo va a ir a la parte delantera de este código. 626 00:30:48,470 --> 00:30:53,930 >> Y si esto estaba allí porque un amigo hacker malicioso vino y 627 00:30:53,930 --> 00:30:56,820 inyectado esto, entonces tal vez esta cantidad de A es no es realmente Atléticos. 628 00:30:56,820 --> 00:31:02,030 Y en realidad es sólo el código que se rompe su computadora o algo así. 629 00:31:02,030 --> 00:31:05,930 Así que para estar a la defensiva acerca de este tipo de cosa, tiene que asumir que nunca 630 00:31:05,930 --> 00:31:09,120 la entrada del usuario es un cierto cantidad de caracteres. 631 00:31:09,120 --> 00:31:13,310 Por ejemplo, cuando usted estaba haciendo corrector ortográfico, que le dijeron que las palabras eran 632 00:31:13,310 --> 00:31:15,580 sólo va a ser de 40 caracteres largo máximo. 633 00:31:15,580 --> 00:31:16,570 Y eso era bueno. 634 00:31:16,570 --> 00:31:20,150 >> Pero si no, entonces usted tendría que asegúrese de sólo lectura en el 45 635 00:31:20,150 --> 00:31:21,520 caracteres a la vez. 636 00:31:21,520 --> 00:31:24,430 De lo contrario, es posible sobrescribir su buffer. 637 00:31:24,430 --> 00:31:26,140 ¿Tiene preguntas sobre eso. 638 00:31:26,140 --> 00:31:26,733 Sí. 639 00:31:26,733 --> 00:31:28,850 >> AUDIENCIA: ¿Podrías hablar un poco más sobre esto? 640 00:31:28,850 --> 00:31:29,790 >> ANGELA LI: Lo siento. 641 00:31:29,790 --> 00:31:31,040 Sí. 642 00:31:31,040 --> 00:31:32,813 643 00:31:32,813 --> 00:31:35,870 >> AUDIENCIA: El micrófono es sólo para vídeo. 644 00:31:35,870 --> 00:31:37,640 Voy a tratar de proyecto. 645 00:31:37,640 --> 00:31:39,900 Hola, chicos. 646 00:31:39,900 --> 00:31:40,920 Sup? 647 00:31:40,920 --> 00:31:45,330 Así que vamos a repasar algunas cosas en el Biblioteca CS50, que usted ha estado usando 648 00:31:45,330 --> 00:31:49,072 todo el semestre, en su mayoría para obtener la entrada del usuario. 649 00:31:49,072 --> 00:31:53,140 Como ustedes saben, se incluye el CS50 biblioteca con sólo hacer CS50.h, que 650 00:31:53,140 --> 00:31:55,660 contiene todos los prototipos de la funciones que se pueden utilizar, como 651 00:31:55,660 --> 00:31:58,640 GetString y GetInt, y GetFloat, etcétera. 652 00:31:58,640 --> 00:32:02,870 Y hay esta una línea en el CS50 biblioteca que define una cadena, la cual 653 00:32:02,870 --> 00:32:05,380 ustedes todos sabemos a estas alturas es sólo un char *. 654 00:32:05,380 --> 00:32:07,900 >> Pero echemos un vistazo a cómo funciona GetString. 655 00:32:07,900 --> 00:32:10,010 Esta es una versión muy abreviada. 656 00:32:10,010 --> 00:32:15,090 Puede tirar de los archivos de biblioteca CS50 de, creo, manuals.CS50.net. 657 00:32:15,090 --> 00:32:16,750 Y se puede leer a través de la función real. 658 00:32:16,750 --> 00:32:19,330 Pero esto cubre algunos de las partes importantes. 659 00:32:19,330 --> 00:32:23,870 Para ello hemos creado un poco de búfer con una cierta capacidad. 660 00:32:23,870 --> 00:32:27,570 Y lo que hacemos es obtener un carácter a la vez de la norma n. 661 00:32:27,570 --> 00:32:30,910 Ahí es donde las entradas del usuario texto en la consola. 662 00:32:30,910 --> 00:32:33,430 >> Así que vamos a leer en un carácter, siempre y cuando no sea un nuevo 663 00:32:33,430 --> 00:32:37,220 línea y no es el final de archivo, que es el final de la entrada estándar. 664 00:32:37,220 --> 00:32:45,690 Y por cada carácter que leemos en, si ese personaje termina añadiendo 665 00:32:45,690 --> 00:32:50,120 para el número de caracteres que hemos leído y eso es más que nuestra capacidad, 666 00:32:50,120 --> 00:32:53,490 entonces lo que hacemos es simplemente redimensionar nuestra buffer de modo que es el doble de tiempo. 667 00:32:53,490 --> 00:32:56,950 Así que de nuevo, esto protege contra tampón ataques de desbordamiento, ya que usted lee en 668 00:32:56,950 --> 00:32:58,315 un carácter a la vez. 669 00:32:58,315 --> 00:33:02,290 Y si en algún momento usted lee en demasiadas muchos, que acaba de ampliar su buffer. 670 00:33:02,290 --> 00:33:03,330 Se multiplican por dos. 671 00:33:03,330 --> 00:33:05,510 Y entonces usted tiene más espacio. 672 00:33:05,510 --> 00:33:09,120 >> De lo contrario, sólo tiene que añadir un personaje para amortiguar. 673 00:33:09,120 --> 00:33:15,080 Y después de haber leído en todo el caracteres, se encogerá el tampón 674 00:33:15,080 --> 00:33:18,510 volver al tamaño normal, añadir un terminador nulo, y luego regresar. 675 00:33:18,510 --> 00:33:21,880 676 00:33:21,880 --> 00:33:24,960 Ahora, echemos un vistazo a GetInt. 677 00:33:24,960 --> 00:33:27,700 Pueden ustedes leer esto? 678 00:33:27,700 --> 00:33:30,710 Puedo acercar un poco. 679 00:33:30,710 --> 00:33:33,410 680 00:33:33,410 --> 00:33:34,660 No sé cómo funcionan las computadoras. 681 00:33:34,660 --> 00:33:40,840 682 00:33:40,840 --> 00:33:41,270 No importa. 683 00:33:41,270 --> 00:33:42,520 No puedo acercar correctamente. 684 00:33:42,520 --> 00:33:47,500 685 00:33:47,500 --> 00:33:48,770 >> Esto es realmente difícil. 686 00:33:48,770 --> 00:33:49,180 Lo siento. 687 00:33:49,180 --> 00:33:51,490 Vamos a mirar esto. 688 00:33:51,490 --> 00:33:57,140 Así que lo que hace es GetInt primero lee en una cadena de GetString, que 689 00:33:57,140 --> 00:33:59,250 hemos implementado antes. 690 00:33:59,250 --> 00:34:02,945 Y la parte más importante a tener en cuenta aquí es si este intercambio que termina 691 00:34:02,945 --> 00:34:06,400 la lectura es como en realidad no una cadena, entonces nos volvemos a INT_MAX 692 00:34:06,400 --> 00:34:09,409 representar el fracaso. 693 00:34:09,409 --> 00:34:12,645 ¿Por qué nos volvemos INT_MAX lugar de negativa 1 o 1? 694 00:34:12,645 --> 00:34:13,895 ¿Alguna idea? 695 00:34:13,895 --> 00:34:16,853 696 00:34:16,853 --> 00:34:19,350 >> AUDIENCIA: [inaudible] 1 negativo a uno. 697 00:34:19,350 --> 00:34:20,070 >> ANGELA LI: Sí, exactamente. 698 00:34:20,070 --> 00:34:24,560 Así que usted es mucho más probable que sólo quieren a la entrada 1 o negativo 1 cuando se le solicite 699 00:34:24,560 --> 00:34:27,469 para un n-ésimo y cualquiera que sea Maxes n-ésimo. 700 00:34:27,469 --> 00:34:27,969 Es enorme. 701 00:34:27,969 --> 00:34:29,690 Usted probablemente no va a utilizarlo. 702 00:34:29,690 --> 00:34:32,690 Así que esto es como una decisión de diseño para asegurarse de que no accidentalmente 703 00:34:32,690 --> 00:34:38,540 devolverá un error o no regresa 1, lo que podría ser analizado 704 00:34:38,540 --> 00:34:41,199 como respuesta correcta. 705 00:34:41,199 --> 00:34:45,110 Así que si una línea no existe, volvemos INT-MAX. 706 00:34:45,110 --> 00:34:48,090 De lo contrario, se utiliza sscanf, que es como scanf. 707 00:34:48,090 --> 00:34:49,449 Pero se lee en una cadena. 708 00:34:49,449 --> 00:34:54,310 >> Y tenemos esta formateada cadena, que es% i% c. 709 00:34:54,310 --> 00:34:57,440 Y tratar de coincidir con la que lo que el usuario nos dio. 710 00:34:57,440 --> 00:35:01,420 Queremos que el número de cosas coincidentes que es 1, lo que significa que sólo 711 00:35:01,420 --> 00:35:04,940 realmente quiere para que coincida con un número entero rodeado de tal blanco 712 00:35:04,940 --> 00:35:06,840 espacio, tal vez no. 713 00:35:06,840 --> 00:35:10,710 En este caso, si se pone en algo como bar, no coincide en absoluto, 714 00:35:10,710 --> 00:35:14,400 porque es necesario que haya un entero desde el principio. 715 00:35:14,400 --> 00:35:17,060 Así que nunca se volvió sscan 0. 716 00:35:17,060 --> 00:35:19,640 Así que usted no devuelve eso. 717 00:35:19,640 --> 00:35:23,850 >> Alternativamente, si se pone en algo como 1, 2, 3, A, B, C, que partidos 718 00:35:23,850 --> 00:35:27,180 tanto el número entero sino también el personaje después de ella. 719 00:35:27,180 --> 00:35:29,990 Así sscanf devolverá 2, que tampoco es ideal. 720 00:35:29,990 --> 00:35:34,620 Usted no quiere que 1, 2, 3, A, B, C para ser un int válida. 721 00:35:34,620 --> 00:35:36,990 Así que también no funciona. 722 00:35:36,990 --> 00:35:38,530 Pero dicen que pones en algo así como 50. 723 00:35:38,530 --> 00:35:42,460 Eso coincide con el% i, lo que significa conseguirá leer en n. 724 00:35:42,460 --> 00:35:44,790 Y ahora, n contendrá el número 50. 725 00:35:44,790 --> 00:35:46,110 Y entonces usted puede devolverlo. 726 00:35:46,110 --> 00:35:49,270 >> De lo contrario, usted golpea Reintentar. 727 00:35:49,270 --> 00:35:55,790 Y entonces, sólo se va otra vez hasta se obtiene una entrada adecuada al usuario. 728 00:35:55,790 --> 00:35:56,891 ¿Tiene preguntas sobre eso? 729 00:35:56,891 --> 00:36:02,182 >> AUDIENCIA: Así que si usted fuera a imprimir el valor de la GetInt en [inaudible] 730 00:36:02,182 --> 00:36:06,250 sería sólo el número entero y máximo? 731 00:36:06,250 --> 00:36:07,440 >> ANGELA LI: Sí. 732 00:36:07,440 --> 00:36:11,780 Así que si usted utiliza GetInt, usted debe asumir que usted no quiere max nth a 733 00:36:11,780 --> 00:36:15,328 ser una entrada válida, porque te vas asumir que eso era malo. 734 00:36:15,328 --> 00:36:27,740 >> AUDIENCIA: Si no tuviéramos char c y alguien puso en 1, 2, 3, Sam, ¿verdad 735 00:36:27,740 --> 00:36:29,430 seguirá funcionando durante 1, 2, 3? 736 00:36:29,430 --> 00:36:29,750 >> ANGELA LI: Creo que funcionaría. 737 00:36:29,750 --> 00:36:33,340 Pero usted no quiere 123Sam a ser una entrada válida por un usuario. 738 00:36:33,340 --> 00:36:34,670 Eso no es realmente un int. 739 00:36:34,670 --> 00:36:36,840 Por lo tanto, no me parece justo analizarlo como un int. 740 00:36:36,840 --> 00:36:40,910 741 00:36:40,910 --> 00:36:42,160 Aceptar. 742 00:36:42,160 --> 00:36:45,800 En ese caso, vamos a pasar en el Internet. 743 00:36:45,800 --> 00:36:49,120 Así que HTTP no es un idioma. 744 00:36:49,120 --> 00:36:56,060 HTTP es el conjunto de normas para la forma de enviar cosas a los clientes, 745 00:36:56,060 --> 00:36:57,280 ése es usted, a los servidores. 746 00:36:57,280 --> 00:36:59,730 Esa es la gente en la web. 747 00:36:59,730 --> 00:37:02,900 >> Así que HTTP es sinónimo de hipertexto Protocolo de transferencia. 748 00:37:02,900 --> 00:37:04,610 Es el corazón y el alma de toda la web. 749 00:37:04,610 --> 00:37:07,050 La parte de hipertexto solo se refiere a HTML. 750 00:37:07,050 --> 00:37:10,690 La transferencia es clientes como se va a enviar solicitudes de 751 00:37:10,690 --> 00:37:13,060 servidores, que dan respuestas. 752 00:37:13,060 --> 00:37:16,380 Y el protocolo es justo, ¿cómo que usted espera de un servidor se comporte? 753 00:37:16,380 --> 00:37:19,960 Y ¿cómo se supone que se comporten de tal manera que se puede agilizar este 754 00:37:19,960 --> 00:37:21,920 proceso de comunicación? 755 00:37:21,920 --> 00:37:26,650 >> Así que las peticiones HTTP se parecen mucho a esto. 756 00:37:26,650 --> 00:37:28,070 GET es el tipo de solicitud. 757 00:37:28,070 --> 00:37:31,220 Ustedes han visto las solicitudes GET y las peticiones POST. 758 00:37:31,220 --> 00:37:36,690 Ese segundo que existe, / yo, eso es sólo el URI o la dirección URL de donde se 759 00:37:36,690 --> 00:37:38,140 quiero ir dentro del huésped. 760 00:37:38,140 --> 00:37:44,140 Así que esta solicitud se pide la página, como www.facebook.com / me. 761 00:37:44,140 --> 00:37:45,300 Y es una solicitud GET. 762 00:37:45,300 --> 00:37:51,020 Y entonces este HTTP/1.1, que es sólo la versión de HTTP que está utilizando. 763 00:37:51,020 --> 00:37:55,020 Es casi siempre 1.1. 764 00:37:55,020 --> 00:37:56,880 >> Y luego hay un montón de otras cosas también. 765 00:37:56,880 --> 00:38:02,510 Usted puede ver estos si abrir la consola cuando se está 766 00:38:02,510 --> 00:38:03,770 navegar por la web. 767 00:38:03,770 --> 00:38:07,290 Las respuestas parecen algo de la misma familia. 768 00:38:07,290 --> 00:38:09,620 La parte superior es, de nuevo, la tipo de HTTP que está utilizando 769 00:38:09,620 --> 00:38:12,310 seguido de un código de estado. 770 00:38:12,310 --> 00:38:14,700 Así OK 200 es todo funcionó. 771 00:38:14,700 --> 00:38:16,200 Este es tu sitio. 772 00:38:16,200 --> 00:38:17,390 Su contenido va a seguir. 773 00:38:17,390 --> 00:38:21,730 Y entonces se le dirá qué tipo del contenido y otras cosas también. 774 00:38:21,730 --> 00:38:24,620 >> Los códigos de estado, hay unos pocos más importantes que usted debe saber. 775 00:38:24,620 --> 00:38:26,460 200 OK es como de oro de todo. 776 00:38:26,460 --> 00:38:28,490 Todo funciona. 777 00:38:28,490 --> 00:38:29,710 403 Forbidden. 778 00:38:29,710 --> 00:38:32,910 Esto lo que has visto si se le olvidó chmod algo correctamente. 779 00:38:32,910 --> 00:38:34,510 Esto significa que usted no tiene los permisos adecuados a 780 00:38:34,510 --> 00:38:36,210 acceder a ese en el servidor. 781 00:38:36,210 --> 00:38:38,110 Es como, no, usted no puede verlo. 782 00:38:38,110 --> 00:38:39,780 404 significa que algo no existe. 783 00:38:39,780 --> 00:38:40,400 No se ha encontrado. 784 00:38:40,400 --> 00:38:41,640 Usted probablemente ha visto mucho de eso. 785 00:38:41,640 --> 00:38:45,510 >> 500 Error interno del servidor suele ser como si algo salió mal en el lado 786 00:38:45,510 --> 00:38:46,460 del servidor. 787 00:38:46,460 --> 00:38:50,830 Así que cuando usted estaba implementando pset7, si tuviera errores de PHP, usted podría 788 00:38:50,830 --> 00:38:53,890 en realidad ir a la página y ver un manojo entero de PHP error material. 789 00:38:53,890 --> 00:38:56,900 Pero eso no significa que normalmente sucede, porque los sitios web realmente no quieren 790 00:38:56,900 --> 00:38:58,830 decirle por qué su sitio está roto. 791 00:38:58,830 --> 00:39:03,370 Ellos probablemente sólo devuelven un 500 Internal Server Error. 792 00:39:03,370 --> 00:39:06,120 >> Y luego está 418 Soy una tetera. 793 00:39:06,120 --> 00:39:07,910 Hay toda una historia sobre por qué eso es una cosa. 794 00:39:07,910 --> 00:39:09,860 Pero usted puede leer acerca de que en su propio tiempo. 795 00:39:09,860 --> 00:39:11,450 Hay un montón de otros códigos de estado también. 796 00:39:11,450 --> 00:39:12,700 Pero estos son los que usted debe saber. 797 00:39:12,700 --> 00:39:15,660 798 00:39:15,660 --> 00:39:18,610 Así que vamos a hablar de HTML. 799 00:39:18,610 --> 00:39:22,180 HTML, recuerde, no es un lenguaje de programación. 800 00:39:22,180 --> 00:39:23,510 Es un lenguaje de marcas. 801 00:39:23,510 --> 00:39:25,210 Eso significa que describe el contenido. 802 00:39:25,210 --> 00:39:30,440 Te dice lo que parece un documento HTML similar o no es lo que parece 803 00:39:30,440 --> 00:39:32,230 pero la forma en que está estructurado. 804 00:39:32,230 --> 00:39:36,110 >> Por lo tanto, define una estructura y semántica de páginas web. 805 00:39:36,110 --> 00:39:37,830 Es como si, este es un párrafo. 806 00:39:37,830 --> 00:39:40,060 Esta es una lista ordenada. 807 00:39:40,060 --> 00:39:42,360 Esto es como una sección de mi página. 808 00:39:42,360 --> 00:39:43,260 Aquí está el título. 809 00:39:43,260 --> 00:39:44,310 Lo hace cosas por el estilo. 810 00:39:44,310 --> 00:39:48,770 No estilos a nada de eso, porque eso es lo que haces en la CSS. 811 00:39:48,770 --> 00:39:50,270 Y parece que una serie etiquetas de anidado. 812 00:39:50,270 --> 00:39:54,720 Así que para usar un ejemplo de un muy básico Página HTML, usted tiene el DOCTYPE 813 00:39:54,720 --> 00:39:56,720 declaración allí. 814 00:39:56,720 --> 00:40:00,940 >> Esta declaración DOCTYPE es diciendo que estamos usando HTML5. 815 00:40:00,940 --> 00:40:03,370 Entonces usted tiene la gran etiqueta HTML. 816 00:40:03,370 --> 00:40:05,230 Contiene una cabeza y un cuerpo. 817 00:40:05,230 --> 00:40:06,970 Dentro de la cabeza, usted tiene el título. 818 00:40:06,970 --> 00:40:12,950 Eso es lo que sucede en el título barra de su navegador. 819 00:40:12,950 --> 00:40:15,810 Contamos con una etiqueta de vínculo que une en una hoja de estilos externa. 820 00:40:15,810 --> 00:40:19,880 Y luego tenemos un script que extrae de un JavaScript externo. 821 00:40:19,880 --> 00:40:23,750 >> Y luego, dentro de nuestro cuerpo es en realidad lo que se muestra en la página. 822 00:40:23,750 --> 00:40:28,210 Tenemos un párrafo y luego un imagen dentro de ese párrafo. 823 00:40:28,210 --> 00:40:32,000 Esta es una foto de los gatitos. 824 00:40:32,000 --> 00:40:35,840 Observe que la imagen etiqueta se cierra. 825 00:40:35,840 --> 00:40:41,760 Así que en lugar de abrir con una imagen y luego hacer otra / imagen, 826 00:40:41,760 --> 00:40:47,500 sólo hay esta pequeña barra aquí, que lo cierra. 827 00:40:47,500 --> 00:40:53,670 Y la etiqueta de imagen también tiene esta clave atributo de valor llamado alt. 828 00:40:53,670 --> 00:40:56,970 Ese es el texto alternativo que sucede cuando se pasa sobre ella. 829 00:40:56,970 --> 00:41:03,170 >> La mayoría de los elementos HTML tienen algún valor clave cosas que usted puede dar a él, diversos 830 00:41:03,170 --> 00:41:04,420 personalización. 831 00:41:04,420 --> 00:41:06,230 832 00:41:06,230 --> 00:41:08,705 Sí. 833 00:41:08,705 --> 00:41:09,955 >> AUDIENCIA: [inaudible]. 834 00:41:09,955 --> 00:41:17,510 835 00:41:17,510 --> 00:41:19,680 >> ANGELA LI: Bueno, por lo que es una atributo de la etiqueta. 836 00:41:19,680 --> 00:41:25,320 Así que si usted estaba usando jQuery, podría hacer select image.getAttribute. 837 00:41:25,320 --> 00:41:27,930 Y entonces usted puede buscar obtener el atributo alt. 838 00:41:27,930 --> 00:41:31,040 Y se le dará gatitos. 839 00:41:31,040 --> 00:41:37,400 Si te acuerdas de formularios en HTML, entrada elementos tendrán atributos de nombre. 840 00:41:37,400 --> 00:41:41,870 Y eso es lo que PHP utiliza para enviar solicitudes cuando se envía un formulario. 841 00:41:41,870 --> 00:41:44,762 842 00:41:44,762 --> 00:41:50,064 >> AUDIENCIA: ¿Mencionaste algo cómo si utiliza Kittens.jpg o 843 00:41:50,064 --> 00:41:54,410 algo que tiene los desaparecidos archivar carpetas u otros archivos? 844 00:41:54,410 --> 00:41:54,750 >> ANGELA LI: Sí. 845 00:41:54,750 --> 00:41:57,010 Así que esto es lo que se llama un familiar camino, porque yo no voy a dar 846 00:41:57,010 --> 00:41:58,740 que la ruta completa. 847 00:41:58,740 --> 00:42:05,160 Esto es como cuando en C si lo hace fopen algún archivo, si hi.txt fopen, que 848 00:42:05,160 --> 00:42:09,190 hi.txt se espera que sea en el mismo directorio, a menos que se dé una mayor 849 00:42:09,190 --> 00:42:11,530 complejo camino. 850 00:42:11,530 --> 00:42:14,900 >> AUDIENCIA: Así podría especificar qué carpeta [inaudible]? 851 00:42:14,900 --> 00:42:17,660 >> ANGELA LI: Sí. 852 00:42:17,660 --> 00:42:19,370 Y usted puede buscar la manera de hacer eso. 853 00:42:19,370 --> 00:42:23,480 Pero si quería conseguir Kittens.jpg cabo del directorio padre, que iba a hacer 854 00:42:23,480 --> 00:42:24,730 .. / Kittens.jpg. 855 00:42:24,730 --> 00:42:29,680 856 00:42:29,680 --> 00:42:30,930 Sí. 857 00:42:30,930 --> 00:42:32,960 858 00:42:32,960 --> 00:42:33,760 Lo siento. 859 00:42:33,760 --> 00:42:34,045 Sí. 860 00:42:34,045 --> 00:42:35,700 Oh hombre, se me olvidó la pregunta. 861 00:42:35,700 --> 00:42:36,460 ¿Cuál era la pregunta? 862 00:42:36,460 --> 00:42:39,570 Ah, la pregunta era, es decir, Kittens.jpg espera que esté en el mismo directorio? 863 00:42:39,570 --> 00:42:40,630 Y en este caso, lo es. 864 00:42:40,630 --> 00:42:44,030 Pero también se puede dar un cierto camino de tal manera que no tiene que ser. 865 00:42:44,030 --> 00:42:47,100 866 00:42:47,100 --> 00:42:48,350 Bueno? 867 00:42:48,350 --> 00:42:50,190 868 00:42:50,190 --> 00:42:51,350 >> CSS. 869 00:42:51,350 --> 00:42:55,420 Así CSS, como HTML, no es un lenguaje de programación. 870 00:42:55,420 --> 00:42:58,250 CSS es sólo una serie de reglas de estilo. 871 00:42:58,250 --> 00:43:00,130 Es sinónimo de Cascading Style Sheets. 872 00:43:00,130 --> 00:43:03,910 Y usted lo utiliza en conjunción con HTML a las páginas de estilo. 873 00:43:03,910 --> 00:43:08,140 Así que hay tres maneras puede incluirlo. 874 00:43:08,140 --> 00:43:11,950 Una manera de hacerlo es en la cabeza porción de código HTML, usted puede apenas 875 00:43:11,950 --> 00:43:15,410 abrir una etiqueta de estilo y luego se adhieren un poco de CSS gobierna allí. 876 00:43:15,410 --> 00:43:16,759 Es bastante bien. 877 00:43:16,759 --> 00:43:17,228 Sí. 878 00:43:17,228 --> 00:43:21,449 >> AUDIENCIA: ¿Podría poner los etiquetas de estilo en el medio, vamos a 879 00:43:21,449 --> 00:43:22,860 por ejemplo, el cuerpo y / cuerpo. 880 00:43:22,860 --> 00:43:27,400 Y entonces sería un estilo sólo en el cuerpo. 881 00:43:27,400 --> 00:43:28,840 >> ANGELA LI: Usted podría. 882 00:43:28,840 --> 00:43:29,590 Se va a trabajar. 883 00:43:29,590 --> 00:43:33,990 Pero usted no debe, porque el estilo es clase de los metadatos que debe ir en 884 00:43:33,990 --> 00:43:35,890 la cabeza de su documento. 885 00:43:35,890 --> 00:43:38,280 Administración debería realmente sólo contienen lo que en realidad va a 886 00:43:38,280 --> 00:43:39,420 mostrará en la página. 887 00:43:39,420 --> 00:43:42,155 >> AUDIENCIA: ¿Así que te pones estilo en la cabeza con el estilo de la 888 00:43:42,155 --> 00:43:43,930 toda la página web, ¿no? 889 00:43:43,930 --> 00:43:44,300 >> ANGELA LI: Sí. 890 00:43:44,300 --> 00:43:50,470 Así que poner el estilo aquí, estas reglas CSS se aplicará a toda la página en función de 891 00:43:50,470 --> 00:43:52,100 sus selectores. 892 00:43:52,100 --> 00:43:57,090 Así que la mejor manera de hacerlo es en cambio de tener una etiqueta de estilo en la cabeza, 893 00:43:57,090 --> 00:44:00,430 tienes este enlace a un estilo externo laminar que te mostré en el 894 00:44:00,430 --> 00:44:01,980 ejemplo anterior. 895 00:44:01,980 --> 00:44:05,920 Lo que esto hace es que intenta y encuentra el archivo style.css y luego la toma 896 00:44:05,920 --> 00:44:08,470 y los usos que a medida que el estilos de la página. 897 00:44:08,470 --> 00:44:10,500 Y tu style.css haría basta con ver como este. 898 00:44:10,500 --> 00:44:13,330 Sólo sería un montón de CSS. 899 00:44:13,330 --> 00:44:16,210 >> Y, por último, hay otra forma de puede incluir CSS, lo que realmente 900 00:44:16,210 --> 00:44:17,480 no debe hacer nunca. 901 00:44:17,480 --> 00:44:18,950 Es un estilo inline llamada. 902 00:44:18,950 --> 00:44:22,650 Y por lo que cualquier elemento HTML también puede tomar un atributo de estilo. 903 00:44:22,650 --> 00:44:26,320 Y entonces en ese atributo de estilo, le puedes dar reglas CSS. 904 00:44:26,320 --> 00:44:29,140 Así que en este caso, sea cual sea div soy define aquí, que va a 905 00:44:29,140 --> 00:44:32,580 tener un fondo negro y un color de texto blanco. 906 00:44:32,580 --> 00:44:35,620 Pero usted no debe hacer esto, porque lo que esto se pone a su estilo 907 00:44:35,620 --> 00:44:36,850 dentro de su HTML. 908 00:44:36,850 --> 00:44:40,530 >> Y sé que hemos estado hablando acerca de HTML es la estructura y CSS es el estilo. 909 00:44:40,530 --> 00:44:42,790 Si usted hace esto, se mezcla juntos. 910 00:44:42,790 --> 00:44:44,550 Y no es muy limpio. 911 00:44:44,550 --> 00:44:45,800 Así que no hagas eso. 912 00:44:45,800 --> 00:44:47,690 913 00:44:47,690 --> 00:44:52,100 Utilizando un ejemplo de CSS, hasta allí, sólo tienes que seleccionar el cuerpo del HTML 914 00:44:52,100 --> 00:44:52,380 documental. 915 00:44:52,380 --> 00:44:55,110 Y somos así, todo está va a ser Comic Sans. 916 00:44:55,110 --> 00:44:57,290 Asimismo, no recomiendo eso. 917 00:44:57,290 --> 00:44:59,940 Pero se puede hacer eso. 918 00:44:59,940 --> 00:45:03,140 >> La segunda regla aquí, va para seleccionar el elemento en la 919 00:45:03,140 --> 00:45:04,880 página principal con ID. 920 00:45:04,880 --> 00:45:11,690 Así que cualquier elemento HTML, dije ID = Principal, me voy a dar de que un 921 00:45:11,690 --> 00:45:16,020 Margen de 20 píxeles y alinear todo, todo el texto, al centro. 922 00:45:16,020 --> 00:45:19,030 Lo último que selecciona por clase CSS. 923 00:45:19,030 --> 00:45:24,450 Por lo que cualquier elemento de la página que di una clase de sección, voy a hacer que sea 924 00:45:24,450 --> 00:45:26,602 un color de fondo de color azul claro. 925 00:45:26,602 --> 00:45:29,380 926 00:45:29,380 --> 00:45:30,040 Sip. 927 00:45:30,040 --> 00:45:30,700 Eso es todo lo que tengo. 928 00:45:30,700 --> 00:45:30,890 Consulta? 929 00:45:30,890 --> 00:45:34,020 >> AUDIENCIA: ¿Qué significa el hashtag antes principal hacer? 930 00:45:34,020 --> 00:45:36,310 >> ANGELA LI: La pregunta es, ¿qué significa el hashtag antes do principal? 931 00:45:36,310 --> 00:45:40,770 En este caso, el hash en CSS significa seleccionar por ID. 932 00:45:40,770 --> 00:45:47,490 Así que si yo tenía algún elemento HTML, como DIVID = principal, selecciona la regla este CSS 933 00:45:47,490 --> 00:45:49,260 la cosa con principal ID. 934 00:45:49,260 --> 00:45:53,940 Y de manera similar, el período en el frente de sección es Selección por tipo CSS o 935 00:45:53,940 --> 00:45:56,558 seleccione por clase HTML. 936 00:45:56,558 --> 00:46:00,940 >> AUDIENCIA: ¿Por qué hay una cuenta antes de 6 en color de fondo? 937 00:46:00,940 --> 00:46:01,270 >> ANGELA LI: Sí. 938 00:46:01,270 --> 00:46:03,360 Entonces la pregunta es, ¿por qué hay un hash antes de la 6? 939 00:46:03,360 --> 00:46:05,320 Esto es diferente que la de hash. 940 00:46:05,320 --> 00:46:09,500 Esto significa que usted está dando un color hexadecimal. 941 00:46:09,500 --> 00:46:14,260 Así colores hexadecimales, esto sólo representa un color. 942 00:46:14,260 --> 00:46:17,860 Y te acuerdas de triples RGB cuando que hizo el conjunto de procesadores forense? 943 00:46:17,860 --> 00:46:18,770 Esto es similar. 944 00:46:18,770 --> 00:46:21,590 Los dos primeros dígitos representan la cantidad de rojo está en el color. 945 00:46:21,590 --> 00:46:23,260 El segundo dos representan la cantidad de verde. 946 00:46:23,260 --> 00:46:25,450 Y el tercero representa la cantidad de azul. 947 00:46:25,450 --> 00:46:30,060 Y el hash es que esto va para representar un color. 948 00:46:30,060 --> 00:46:35,660 >> Así que cualquier cosa a partir de 0, 0, 0, 0, 0, 0 hasta la F, F, F, F, F, F es válida. 949 00:46:35,660 --> 00:46:39,550 Es un poco de color válido que puede mostrar por su navegador. 950 00:46:39,550 --> 00:46:39,790 Consulta? 951 00:46:39,790 --> 00:46:43,590 >> AUDIENCIA: ¿Cuál es la diferencia entre utilizando por ID y por clase? 952 00:46:43,590 --> 00:46:46,470 >> ANGELA LI: La pregunta es ¿cuál es la diferencia entre los 953 00:46:46,470 --> 00:46:48,950 utilizando por ID y clase? 954 00:46:48,950 --> 00:46:54,390 Usted sólo puede tener un elemento en un Documento HTML que tiene un ID dado. 955 00:46:54,390 --> 00:46:58,660 Así que sólo una cosa en mi página se le permite tener mayor identificación. 956 00:46:58,660 --> 00:47:02,580 Así que lo utilice para esto es la cabecera. 957 00:47:02,580 --> 00:47:03,850 Esta es la navegación. 958 00:47:03,850 --> 00:47:05,230 Este es el pie de página. 959 00:47:05,230 --> 00:47:09,070 Las clases son diferentes, porque se puede aplicar las clases a la mayor cantidad de elementos HTML 960 00:47:09,070 --> 00:47:10,100 como quieras. 961 00:47:10,100 --> 00:47:15,860 >> Así, por ejemplo, lo hice sección de clase, porque es probable que haya más de un 962 00:47:15,860 --> 00:47:17,540 sección en mi página. 963 00:47:17,540 --> 00:47:20,200 Sólo está permitido tener la mayor cantidad elementos de la página con el mismo 964 00:47:20,200 --> 00:47:23,190 clase, pero sólo uno con una cierta identidad. 965 00:47:23,190 --> 00:47:25,600 >> AUDIENCIA: Así que el punto representa la clase? 966 00:47:25,600 --> 00:47:26,090 >> ANGELA LI: Sí. 967 00:47:26,090 --> 00:47:27,380 Un punto representa una clase. 968 00:47:27,380 --> 00:47:29,990 969 00:47:29,990 --> 00:47:31,540 Genial. 970 00:47:31,540 --> 00:47:32,370 Eso es todo lo que tengo, chicos. 971 00:47:32,370 --> 00:47:33,544 Gracias. 972 00:47:33,544 --> 00:48:13,380 >> [Aplausos] 973 00:48:13,380 --> 00:48:14,290 >> ZAMYLA CHAN: Hola a todos. 974 00:48:14,290 --> 00:48:14,880 Estoy Zamyla. 975 00:48:14,880 --> 00:48:18,830 Voy a estar cubriendo PHP, MVC, y SQL hoy. 976 00:48:18,830 --> 00:48:22,350 977 00:48:22,350 --> 00:48:26,110 Una gran parte del material que voy a estar cubierta va a ser más o menos 978 00:48:26,110 --> 00:48:29,100 nada más sacarlo de pset7. 979 00:48:29,100 --> 00:48:29,700 Está bien. 980 00:48:29,700 --> 00:48:31,180 Entonces, ¿qué es PHP? 981 00:48:31,180 --> 00:48:35,150 PHP significa PHP Hypertext Preprocessor. 982 00:48:35,150 --> 00:48:38,740 Así que, en sí mismo, es un recursiva nombre, que está muy bien. 983 00:48:38,740 --> 00:48:42,220 PHP es un lenguaje de script del lado del servidor, y proporciona el backend 984 00:48:42,220 --> 00:48:44,610 y los fundamentos lógicos de nuestra página web. 985 00:48:44,610 --> 00:48:48,520 >> Así Angela habló mucho sobre el código HTML y CSS que hará que la estructura 986 00:48:48,520 --> 00:48:49,530 de la página web. 987 00:48:49,530 --> 00:48:53,210 Pero lo que si usted quiere cambiar eso el contenido de forma dinámica o si varía 988 00:48:53,210 --> 00:48:55,240 basado en el usuario o ciertas condiciones? 989 00:48:55,240 --> 00:48:57,060 Ahí es donde entra en juego PHP 990 00:48:57,060 --> 00:49:02,610 Ahora, por lo general, PHP puede tardar unos menos líneas para poner en práctica la misma cosa 991 00:49:02,610 --> 00:49:07,380 en C. Esto es debido a que PHP maneja la memoria gestión para el programador, 992 00:49:07,380 --> 00:49:11,170 en lugar de que nosotros tengamos que malloc libre, cosas así. 993 00:49:11,170 --> 00:49:15,430 >> Pero ya que PHP es una interpretación idioma, por lo general, puede ejecutar 994 00:49:15,430 --> 00:49:19,540 un poco más lento que C, la cual es un lenguaje compilado. 995 00:49:19,540 --> 00:49:23,150 Debido a que estamos moviendo la programación idiomas, echemos un vistazo a cómo el 996 00:49:23,150 --> 00:49:24,570 sintaxis será diferente. 997 00:49:24,570 --> 00:49:28,770 Vamos a ser muy cuidadosos de no confundirse con esto. 998 00:49:28,770 --> 00:49:33,750 Así que con la sintaxis de PHP, si usted es Incorporación de tus PHP dentro de un HTML 999 00:49:33,750 --> 00:49:40,430 presentar o dentro de un archivo PHP. sí, que que adjuntar el código en el abierto 1000 00:49:40,430 --> 00:49:45,270 PHP y las etiquetas PHP cerrados como siguiente, al igual que en la pantalla. 1001 00:49:45,270 --> 00:49:46,660 >> Las variables en PHP. 1002 00:49:46,660 --> 00:49:51,490 Cada una sola variable se iniciará con el signo $ seguido del nombre de 1003 00:49:51,490 --> 00:49:53,150 su variable. 1004 00:49:53,150 --> 00:49:56,530 Ahora, las variables en PHP se escriben libremente, lo que significa que no es necesario 1005 00:49:56,530 --> 00:50:00,030 para indicar cuál es el tipo de datos es cuando usted está declararlo. 1006 00:50:00,030 --> 00:50:03,505 Sin embargo, esto no significa que se no tienen ningún tipo en absoluto. 1007 00:50:03,505 --> 00:50:09,370 Así que si me declaro una variable y acaba de establecer es igual a 1, y luego declaro 1008 00:50:09,370 --> 00:50:15,140 otra variable, establezca su valor en "1" y luego otro 1,0, bueno, 1009 00:50:15,140 --> 00:50:19,410 dependiendo del tipo de la igualdad operadores que utilizo, si yo quiero comparar 1010 00:50:19,410 --> 00:50:21,830 en todos los tipos, entonces que van a ser iguales. 1011 00:50:21,830 --> 00:50:25,570 Pero si yo quiero estar seguro de que el tipos son iguales, PHP puede todavía hacer 1012 00:50:25,570 --> 00:50:28,690 que, a pesar de que no indicamos de qué tipo es cuando 1013 00:50:28,690 --> 00:50:31,170 primero hacer el archivo. 1014 00:50:31,170 --> 00:50:33,990 >> Ahora bien, en PHP, aunque somos conmutación de de programación 1015 00:50:33,990 --> 00:50:39,360 idiomas de C, todavía tenemos nuestra de confianza si la condición, al igual que este. 1016 00:50:39,360 --> 00:50:43,270 Todavía tenemos nuestros ciclos while, simplemente como este, donde usted pone en su 1017 00:50:43,270 --> 00:50:47,300 condiciones y luego la cuerpo del bucle. 1018 00:50:47,300 --> 00:50:50,360 Y luego también tenemos nuestro bucle for, que por lo general se parece a esto. 1019 00:50:50,360 --> 00:50:55,330 Así que si yo quería para iterar sobre todos nueve conjuntos de procesadores y presentar y llamar a un 1020 00:50:55,330 --> 00:50:58,960 función submitPset, entonces puedo hacer eso aquí, que ustedes todos han 1021 00:50:58,960 --> 00:50:59,830 hecho por este punto. 1022 00:50:59,830 --> 00:51:01,080 Felicidades, por cierto. 1023 00:51:01,080 --> 00:51:04,560 1024 00:51:04,560 --> 00:51:07,550 >> Para la cámara, la gente Dicho esto, gracias. 1025 00:51:07,550 --> 00:51:11,220 Ahora, si usted no quiere sólo tiene que utilizar este bucle, entonces PHP en realidad también 1026 00:51:11,220 --> 00:51:13,580 ha llamado cosas bucles foreach. 1027 00:51:13,580 --> 00:51:22,210 Así que si yo tenía un arreglo de enteros, 0 a 8, almacenada en los conjuntos de procesadores de matriz, 1028 00:51:22,210 --> 00:51:27,290 entonces yo podría tener un bucle foreach que itera sobre todos los números en conjuntos de procesadores. 1029 00:51:27,290 --> 00:51:30,640 Y entonces yo podría llamar a la misma funcionar en ocho ocasiones, 1030 00:51:30,640 --> 00:51:31,910 al igual que lo hacía antes. 1031 00:51:31,910 --> 00:51:36,480 Así que esto para cada bucle es bueno, porque usted no tiene que si usted no sabe 1032 00:51:36,480 --> 00:51:39,470 la longitud exacta de la matriz que se haber, a continuación, utilizando este bucle foreach 1033 00:51:39,470 --> 00:51:42,800 se hará cargo de eso por ti. 1034 00:51:42,800 --> 00:51:45,410 >> Así que hice conjuntos de procesadores como una matriz. 1035 00:51:45,410 --> 00:51:46,700 Echemos un vistazo a eso. 1036 00:51:46,700 --> 00:51:51,290 Las matrices en PHP son normalmente los mismos que los que hemos tenido en C, donde 1037 00:51:51,290 --> 00:51:52,960 puede declarar una matriz. 1038 00:51:52,960 --> 00:51:59,200 Y aquí, puedo declarar una matriz vacía y luego construir dinámicamente utilizando 1039 00:51:59,200 --> 00:52:00,850 índices como enteros. 1040 00:52:00,850 --> 00:52:04,140 Así el índice 0, voy a guardar un número entero nombrado 1. 1041 00:52:04,140 --> 00:52:09,210 En el índice 1 de mi lista, me voy para almacenar el valor 2. 1042 00:52:09,210 --> 00:52:12,670 Y en el tercer índice pero el segundo número, que voy a 1043 00:52:12,670 --> 00:52:14,870 almacenar el número 12. 1044 00:52:14,870 --> 00:52:17,250 >> Ahora, esto está muy bien en ese funciona funciona bien. 1045 00:52:17,250 --> 00:52:21,310 Pero dicen que a mí me importa lo que depara cada índice. 1046 00:52:21,310 --> 00:52:24,500 Para mí, el índice de 0 significa que la forma en muchos gatos que tienen. 1047 00:52:24,500 --> 00:52:27,400 Y el índice de 1 significa que la forma en muchos búhos yo tenemos. 1048 00:52:27,400 --> 00:52:29,450 Y el siguiente significa el número de perros. 1049 00:52:29,450 --> 00:52:34,140 Bueno, entonces es para especificar que, en lugar de tener que recordar 0 se refiere a 1050 00:52:34,140 --> 00:52:38,090 gatos y 1 a los búhos, que pueden utilizar matrices asociativas, lo que significa que 1051 00:52:38,090 --> 00:52:42,260 en lugar de enteros como mis índices, Puedo realmente usar cadenas. 1052 00:52:42,260 --> 00:52:43,290 >> Así que esto es bastante útil. 1053 00:52:43,290 --> 00:52:47,130 Y has básicamente acaba de reemplazar los números enteros con cuerdas. 1054 00:52:47,130 --> 00:52:50,074 Y ahí lo tienen un matriz asociativa. 1055 00:52:50,074 --> 00:52:51,930 Sí. 1056 00:52:51,930 --> 00:52:55,800 >> AUDIENCIA: ¿Hay una razón por la que hay un guión para el segundo 1057 00:52:55,800 --> 00:52:58,750 parte, porque mi lista tiene la matriz. 1058 00:52:58,750 --> 00:53:01,330 >> ZAMYLA CHAN: La pregunta era, es Hay una razón por la cual hay una 1059 00:53:01,330 --> 00:53:03,320 Destacar entre mi y la lista? 1060 00:53:03,320 --> 00:53:03,610 No. 1061 00:53:03,610 --> 00:53:06,878 Eso es lo que estoy nombrando mi variable. 1062 00:53:06,878 --> 00:53:11,670 >> AUDIENCIA: En la primera line, es una palabra. 1063 00:53:11,670 --> 00:53:12,560 >> ZAMYLA CHAN: Mis disculpas. 1064 00:53:12,560 --> 00:53:13,410 Voy a arreglar eso. 1065 00:53:13,410 --> 00:53:13,620 Sí. 1066 00:53:13,620 --> 00:53:15,460 Ellos deben ser el mismo nombre de variable. 1067 00:53:15,460 --> 00:53:16,710 Buena atrapada. 1068 00:53:16,710 --> 00:53:19,640 1069 00:53:19,640 --> 00:53:19,950 Aceptar. 1070 00:53:19,950 --> 00:53:22,610 Así que vamos a pasar a la cadena concatenación. 1071 00:53:22,610 --> 00:53:27,500 Si quería tener dos cadenas, entonces puedo concatenar 1072 00:53:27,500 --> 00:53:28,550 con el operador punto. 1073 00:53:28,550 --> 00:53:32,440 Así que si tengo Milo como primer nombre y plátano como un apellido, a continuación, 1074 00:53:32,440 --> 00:53:35,430 concatenar con el operador punto y luego poner un espacio entre 1075 00:53:35,430 --> 00:53:39,210 hará una cadena que contiene Milo Banana, que luego puedo repetir o, 1076 00:53:39,210 --> 00:53:41,280 más bien, imprimir. 1077 00:53:41,280 --> 00:53:44,465 >> Hablando de eco, vamos a hablar sobre algunos útiles - 1078 00:53:44,465 --> 00:53:44,920 ¡Uy. 1079 00:53:44,920 --> 00:53:46,030 Lo siento. 1080 00:53:46,030 --> 00:53:52,920 Algunas funciones de PHP útiles. 1081 00:53:52,920 --> 00:53:56,240 Así que tenemos la - 1082 00:53:56,240 --> 00:53:57,444 dificultades técnicas. 1083 00:53:57,444 --> 00:53:58,694 Un segundo. 1084 00:53:58,694 --> 00:54:16,960 1085 00:54:16,960 --> 00:54:19,550 Envié. 1086 00:54:19,550 --> 00:54:22,320 Problemas de PowerPoint. 1087 00:54:22,320 --> 00:54:29,200 Y estamos de vuelta con las funciones de PHP. 1088 00:54:29,200 --> 00:54:32,010 1089 00:54:32,010 --> 00:54:35,150 Y estamos de vuelta con las funciones de PHP. 1090 00:54:35,150 --> 00:54:39,890 >> Así que tenemos la función de exigir, en caso si se pasa un archivo, esto es que se acaba de 1091 00:54:39,890 --> 00:54:43,300 un ejemplo de un archivo que Podría pasar pulg 1092 00:54:43,300 --> 00:54:47,605 Luego de que se incluya el código PHP a partir de ese archivo que indico. 1093 00:54:47,605 --> 00:54:49,940 Y va a evaluar esa pulg 1094 00:54:49,940 --> 00:54:54,450 Luego también tenemos eco, que es un paralelo a printf. 1095 00:54:54,450 --> 00:54:57,710 Exit es un paralelo de romper, que sale del bloque de 1096 00:54:57,710 --> 00:54:58,570 código que usted está adentro 1097 00:54:58,570 --> 00:55:03,180 Y a continuación, los controles vacíos si un dado variable es como nulo o cero o 1098 00:55:03,180 --> 00:55:08,482 lo se equipara con ser vacía. 1099 00:55:08,482 --> 00:55:09,438 Sí. 1100 00:55:09,438 --> 00:55:15,341 >> AUDIENCIA: Para la concatenación de cadenas punto operador de uno, en PHP, es que el 1101 00:55:15,341 --> 00:55:20,158 mismo que en JavaScript, donde se trata de utilizar el punto para la concatenación significa plus? 1102 00:55:20,158 --> 00:55:27,440 Así que por el nombre completo, usted podría tener dólar firmar primero y luego + + durar? 1103 00:55:27,440 --> 00:55:27,720 >> ZAMYLA CHAN: Si. 1104 00:55:27,720 --> 00:55:32,150 Así que la pregunta era si en PHP que puede utilizar la misma concatenación de cadenas 1105 00:55:32,150 --> 00:55:33,890 como en JavaScript con las cosas positivas. 1106 00:55:33,890 --> 00:55:35,410 Y José a entrar en eso más adelante. 1107 00:55:35,410 --> 00:55:36,620 Creo que tiene un tobogán en eso. 1108 00:55:36,620 --> 00:55:37,570 En realidad, es diferente. 1109 00:55:37,570 --> 00:55:41,310 Así que en JavaScript, es necesario utilizar el signo más para concatenar cadenas. 1110 00:55:41,310 --> 00:55:43,280 Y en PHP, usted tiene que utilizar el operador punto. 1111 00:55:43,280 --> 00:55:44,530 Así que son diferentes. 1112 00:55:44,530 --> 00:55:46,680 1113 00:55:46,680 --> 00:55:46,910 >> Aceptar. 1114 00:55:46,910 --> 00:55:49,500 Así que ahora que hemos cubierto todo este PHP, donde lo hace 1115 00:55:49,500 --> 00:55:50,490 realmente ser útil? 1116 00:55:50,490 --> 00:55:54,470 Bueno, que viene muy bien cuando nos puede combinar con nuestro HTML. 1117 00:55:54,470 --> 00:55:59,550 Así que nuestro PHP nos dará el poder para alterar el contenido HTML de una página antes de 1118 00:55:59,550 --> 00:56:00,000 su carga. 1119 00:56:00,000 --> 00:56:04,270 Así sobre la base de diferentes condiciones, por lo general el usuario específico que es 1120 00:56:04,270 --> 00:56:07,520 conectado, podemos visualizar información diferente. 1121 00:56:07,520 --> 00:56:08,800 Linda, ¿tuvo usted alguna pregunta? 1122 00:56:08,800 --> 00:56:15,510 >> AUDIENCIA: ¿Puede concatenar También un número entero? 1123 00:56:15,510 --> 00:56:16,760 >> ZAMYLA CHAN: Sí, se puede. 1124 00:56:16,760 --> 00:56:19,530 1125 00:56:19,530 --> 00:56:23,270 Así que la pregunta era si se puede concatenar números enteros o otra 1126 00:56:23,270 --> 00:56:28,920 variable.s ahora, pasamos a MVC, que es un paradigma que hemos utilizado en 1127 00:56:28,920 --> 00:56:33,380 pset7 y un montón de diseñadores web utilizan para organizar el código en los archivos 1128 00:56:33,380 --> 00:56:34,490 en su sitio web. 1129 00:56:34,490 --> 00:56:35,870 M significa Modelo. 1130 00:56:35,870 --> 00:56:41,450 Y, básicamente, los archivos de modelo se ocuparán con las interacciones con la base de datos. 1131 00:56:41,450 --> 00:56:44,640 Ver los archivos, que se relacionan con la estética de la página web. 1132 00:56:44,640 --> 00:56:47,550 Y las asas Controlador solicitudes de los usuarios, lo analiza 1133 00:56:47,550 --> 00:56:49,230 de datos, hace otra lógica. 1134 00:56:49,230 --> 00:56:52,520 >> En pset7, combinamos el modelo y el controlador. 1135 00:56:52,520 --> 00:56:55,880 Y sólo los llamamos controladores y ponerlos en el directorio público. 1136 00:56:55,880 --> 00:57:01,730 Y los archivos de vista, que los utilizan como plantillas en el directorio de plantillas. 1137 00:57:01,730 --> 00:57:07,260 Así que este diagrama aquí también representa Ese mismo tipo de división con el 1138 00:57:07,260 --> 00:57:10,510 modelo y el controlador de color morado aquí a la izquierda y 1139 00:57:10,510 --> 00:57:12,770 la vista de la derecha. 1140 00:57:12,770 --> 00:57:16,020 Así que este es un esquema que algunos de ustedes pueden haber visto en horario de oficina o 1141 00:57:16,020 --> 00:57:19,130 diagramas que nos dibujo como usted fueron el cálculo de su conjunto de procesadores. 1142 00:57:19,130 --> 00:57:25,030 >> Así que aquí, en un controlador determinado, un modelo controlador, tenemos funciones 1143 00:57:25,030 --> 00:57:30,490 que se refieren a la consulta del SQL base de datos, la ejecución de la lógica de PHP. 1144 00:57:30,490 --> 00:57:32,370 Tal vez usted mirar hacia arriba un stock en Yahoo! 1145 00:57:32,370 --> 00:57:34,590 Finanzas. 1146 00:57:34,590 --> 00:57:37,390 O tal vez, simplemente le revise para ver si un usuario había presentado un 1147 00:57:37,390 --> 00:57:40,250 formar ya antes de tener visitado su página. 1148 00:57:40,250 --> 00:57:43,390 Y luego le hacen Un formulario aquí. 1149 00:57:43,390 --> 00:57:48,210 Después se había presentado esa forma por el usuario, la acción que era 1150 00:57:48,210 --> 00:57:53,470 especificada en la etiqueta HTML del formulario indicaría la página que 1151 00:57:53,470 --> 00:57:55,620 devuelve los datos a. 1152 00:57:55,620 --> 00:57:59,460 >> Así que toda esa información sería enviado de vuelta a su controlador. 1153 00:57:59,460 --> 00:58:02,620 Entonces usted probablemente hacer un poco más lógica en que y tal vez ejecutar unos pocos 1154 00:58:02,620 --> 00:58:06,510 más consultas en la base de datos SQL y entonces, finalmente, llegar a un bien 1155 00:58:06,510 --> 00:58:11,930 sistema lleno de información que lo haría pasar en alguna otra plantilla 1156 00:58:11,930 --> 00:58:13,950 que muestran esa información. 1157 00:58:13,950 --> 00:58:17,030 Ahora, ¿cómo podemos empaquetamos que la información arriba? 1158 00:58:17,030 --> 00:58:23,980 Bueno, tenemos una función llamada Render que se encontraba en el archivo functions.php en 1159 00:58:23,980 --> 00:58:29,950 pset7, donde se pasa en el nombre de un archivo, el nombre de una plantilla. 1160 00:58:29,950 --> 00:58:32,160 >> Y luego también se pasa en una matriz asociativa. 1161 00:58:32,160 --> 00:58:37,150 Y para que array asociativo representa las diferentes informaciones 1162 00:58:37,150 --> 00:58:39,040 que desea pasar pulg 1163 00:58:39,040 --> 00:58:43,460 Ahora, ¿qué va a ser constante en estos ejemplos es que las llaves o, 1164 00:58:43,460 --> 00:58:47,070 más bien, las teclas de la asociativo matrices, esos son lo que va a ser 1165 00:58:47,070 --> 00:58:51,050 espera que sea constante por la plantilla, porque sabe que necesita 1166 00:58:51,050 --> 00:58:53,990 algo que se llama mensaje o llamada nombre. 1167 00:58:53,990 --> 00:58:56,940 Y entonces las cosas a la derecha, el valores reales, por lo que en este caso, ¿quién es 1168 00:58:56,940 --> 00:59:00,750 un buen chico y Milo, los que van a ser los valores que están cambiando 1169 00:59:00,750 --> 00:59:05,610 que el controlador cambia cada vez o basado en una cierta condición y 1170 00:59:05,610 --> 00:59:07,120 pasará que pulg 1171 00:59:07,120 --> 00:59:12,790 >> Así que aquí en plantillas, vemos que están utilizando HTML caracteres especiales, 1172 00:59:12,790 --> 00:59:16,370 que, básicamente, sólo significa que queremos para obtener la cadena de pares que la 1173 00:59:16,370 --> 00:59:17,580 usuario pone adentro 1174 00:59:17,580 --> 00:59:20,880 Y queremos sustituir mensaje ahí. 1175 00:59:20,880 --> 00:59:26,110 Así que cuando vemos en realidad el archivo, la específica 1176 00:59:26,110 --> 00:59:28,700 información se pasa pulg 1177 00:59:28,700 --> 00:59:33,850 Tenga en cuenta que la clave de cómo hacer obras es que las claves de la asociativo 1178 00:59:33,850 --> 00:59:37,170 matrices, esas variables convertido nombres aquí. 1179 00:59:37,170 --> 00:59:40,720 Y así los valores de esa clave en el array asociativo se convierte en el 1180 00:59:40,720 --> 00:59:41,970 valor de la variable. 1181 00:59:41,970 --> 00:59:44,800 1182 00:59:44,800 --> 00:59:46,040 >> Ahora, vamos a pasar a SQL. 1183 00:59:46,040 --> 00:59:48,010 Representa Estructurado Lenguaje de consulta. 1184 00:59:48,010 --> 00:59:50,460 Y por lo que esta es sólo una programación lenguaje diseñado 1185 00:59:50,460 --> 00:59:51,880 para la gestión de bases de datos. 1186 00:59:51,880 --> 00:59:56,860 Y fue muy útil para nosotros en nuestra página web de finanzas pset7. 1187 00:59:56,860 --> 01:00:00,510 En esencia, es sólo una manera fácil de rastrear y administrar los objetos y tablas 1188 01:00:00,510 --> 01:00:02,070 y vincularlos entre sí. 1189 01:00:02,070 --> 01:00:06,860 Ahora, piense en su base de datos SQL básicamente como un archivo de Excel, quizás, 1190 01:00:06,860 --> 01:00:10,040 con varias hojas con pestañas. 1191 01:00:10,040 --> 01:00:13,820 >> Así, puedes tener varias tablas, quizás, que unidas entre sí. 1192 01:00:13,820 --> 01:00:19,420 Y al igual que Excel, tenemos una gran cantidad de la funcionalidad que queremos. 1193 01:00:19,420 --> 01:00:22,300 Por ejemplo, podemos seleccionar ciertas filas. 1194 01:00:22,300 --> 01:00:24,110 Podemos insertar información. 1195 01:00:24,110 --> 01:00:25,560 Podemos actualizar filas. 1196 01:00:25,560 --> 01:00:27,440 Y también podemos eliminar cosas. 1197 01:00:27,440 --> 01:00:30,920 1198 01:00:30,920 --> 01:00:36,560 >> El SQL seleccionar las obras mediante la selección de filas o una fila de columnas especificado desde un 1199 01:00:36,560 --> 01:00:39,640 base de datos que coincidan con un determinado criterios que usted indique. 1200 01:00:39,640 --> 01:00:44,930 Así que por aquí cuando veo select * from magos dónde está la casa = Ravenclaw, luego 1201 01:00:44,930 --> 01:00:48,340 Estoy seleccionando *, lo que significa que soy seleccionar cada columna única en ese 1202 01:00:48,340 --> 01:00:56,340 fila de la tabla de los magos, pero sólo si la columna de la casa es igual a Ravenclaw. 1203 01:00:56,340 --> 01:00:57,840 Ahora, esto es puro o SQL. 1204 01:00:57,840 --> 01:01:02,680 Así que si me fui a phpMyAdmin, que es la forma específica en que utilizamos para gestionar 1205 01:01:02,680 --> 01:01:07,040 nuestras bases de datos SQL, entonces yo podría insertar que en el sitio web de phpMyAdmin. 1206 01:01:07,040 --> 01:01:08,290 Y eso sería ejecutar. 1207 01:01:08,290 --> 01:01:11,280 >> Pero que en realidad queremos hacer que en el lado de PHP. 1208 01:01:11,280 --> 01:01:12,580 Entonces, ¿cómo hacemos eso? 1209 01:01:12,580 --> 01:01:20,180 Bueno, usamos la función de consulta, que básicamente ejecuta esa consulta SQL. 1210 01:01:20,180 --> 01:01:21,830 El uso de? 1211 01:01:21,830 --> 01:01:25,850 como marcador de posición, podemos pasar en cierta valores a nuestra cadena que nos 1212 01:01:25,850 --> 01:01:26,920 desea reemplazar. 1213 01:01:26,920 --> 01:01:32,110 Así que tal vez estoy almacenando diferente valores en el curr_house, que 1214 01:01:32,110 --> 01:01:34,400 representa la casa actual que yo estoy pasando. 1215 01:01:34,400 --> 01:01:39,040 Así que puede pasar que en un marcador de posición con el signo de interrogación. 1216 01:01:39,040 --> 01:01:43,290 Y luego voy a básicamente ejecuto el lo mismo que hice antes, excepto 1217 01:01:43,290 --> 01:01:45,550 Ahora, estoy en PHP. 1218 01:01:45,550 --> 01:01:51,300 >> Y consulta devolverá un matriz asociativa. 1219 01:01:51,300 --> 01:01:53,470 Y voy a guardarlo en filas. 1220 01:01:53,470 --> 01:01:56,880 Ahora, consulta siempre puede fallar. 1221 01:01:56,880 --> 01:02:02,870 Tal vez la consulta SQL no pudo ejecutar porque la tabla no existe. 1222 01:02:02,870 --> 01:02:04,310 O tal vez, no existía la columna. 1223 01:02:04,310 --> 01:02:05,400 Algo salió mal. 1224 01:02:05,400 --> 01:02:08,170 Bueno, en ese caso, usted querrá asegurarse de Seguro que compruebe si el 1225 01:02:08,170 --> 01:02:09,700 consulta devuelve falso. 1226 01:02:09,700 --> 01:02:15,590 Y eso es mediante el uso de la triple es igual a la operación allí. 1227 01:02:15,590 --> 01:02:19,660 >> Y entonces me disculpo, que es otra Función CS50, pasando en un mensaje. 1228 01:02:19,660 --> 01:02:23,435 Y si nos fijamos en pedir disculpas, todo lo que realmente hace es hacer apology.php. 1229 01:02:23,435 --> 01:02:26,100 1230 01:02:26,100 --> 01:02:26,410 Sí. 1231 01:02:26,410 --> 01:02:29,630 >> AUDIENCIA: ¿Podría explicar lo que estrella hace entre selecto y de? 1232 01:02:29,630 --> 01:02:30,710 >> ZAMYLA CHAN: Sí, por supuesto. 1233 01:02:30,710 --> 01:02:35,220 Así que la estrella en el medio de selección y de significa que yo deseo seleccionar el conjunto 1234 01:02:35,220 --> 01:02:37,440 toda la fila de mi mesa. 1235 01:02:37,440 --> 01:02:41,900 Podría haber indicado seleccione nombre, año, casa. 1236 01:02:41,900 --> 01:02:46,160 Y yo sólo iba a conseguir esos tres columnas en mi mesa. 1237 01:02:46,160 --> 01:02:51,560 Pero si digo select *, entonces voy a poner todo en esa columna. 1238 01:02:51,560 --> 01:02:53,760 Entonces me voy a ir a usted en la parte de atrás primero. 1239 01:02:53,760 --> 01:02:57,656 >> AUDIENCIA: Así que esto es todavía en SQL, ¿verdad? 1240 01:02:57,656 --> 01:02:59,610 ¿Es esta consulta o se trata de PHP? 1241 01:02:59,610 --> 01:03:00,550 >> ZAMYLA CHAN: Estamos en una consulta. 1242 01:03:00,550 --> 01:03:01,940 Así que esto es en PHP. 1243 01:03:01,940 --> 01:03:06,280 Así, utilizando la consulta función de PHP, estamos ejecutando una consulta SQL. 1244 01:03:06,280 --> 01:03:11,988 1245 01:03:11,988 --> 01:03:15,364 >> AUDIENCIA: ¿Hay algo en SQL mayúsculas y minúsculas, como seleccionar 1246 01:03:15,364 --> 01:03:17,834 o magos o casa? 1247 01:03:17,834 --> 01:03:20,050 >> ZAMYLA CHAN: ¿Hay algo en SQL entre mayúsculas y minúsculas? 1248 01:03:20,050 --> 01:03:21,760 Yo creo que sí. 1249 01:03:21,760 --> 01:03:24,620 Creo que SELECT y FROM ¿Y dónde están entre mayúsculas y minúsculas. 1250 01:03:24,620 --> 01:03:25,535 No? 1251 01:03:25,535 --> 01:03:27,500 >> ROB BOWDEN: Entonces, es todo lo contrario. 1252 01:03:27,500 --> 01:03:32,030 Los nombres de columna y los medios de la tabla, todos esos son mayúsculas y minúsculas. 1253 01:03:32,030 --> 01:03:35,470 Pero ninguna de las palabras claves de MySQL, como SELECT, FROM y WHERE, esos no son 1254 01:03:35,470 --> 01:03:36,140 mayúsculas y minúsculas. 1255 01:03:36,140 --> 01:03:36,420 Aceptar. 1256 01:03:36,420 --> 01:03:37,780 Así lo contrario de lo que dije. 1257 01:03:37,780 --> 01:03:40,420 Así que todas las palabras claves de MySQL - 1258 01:03:40,420 --> 01:03:42,670 seleccionar, desde donde - los No se distingue entre mayúsculas y minúsculas. 1259 01:03:42,670 --> 01:03:44,630 Pero todo lo demás es. 1260 01:03:44,630 --> 01:03:45,210 Aceptar. 1261 01:03:45,210 --> 01:03:46,500 Usted en la parte delantera. 1262 01:03:46,500 --> 01:03:52,041 >> AUDIENCIA: Si Tengo $ filas en términos de más de una fila, ¿significa que es 1263 01:03:52,041 --> 01:03:53,640 sólo se convierte en una matriz asociativa? 1264 01:03:53,640 --> 01:03:59,550 >> ZAMYLA CHAN: Así que la pregunta era si las filas tiene más de una fila en el mismo, no 1265 01:03:59,550 --> 01:04:01,800 que se convierta en una matriz asociativa? 1266 01:04:01,800 --> 01:04:05,680 Así que es un conjunto de empresas asociativas matrices ya. 1267 01:04:05,680 --> 01:04:10,730 Así que incluso si sólo hay una fila regresado, entonces usted tendría que ir a 1268 01:04:10,730 --> 01:04:12,690 índice 0 de ese resultado. 1269 01:04:12,690 --> 01:04:15,316 Y entonces usted tendría que primera fila. 1270 01:04:15,316 --> 01:04:17,482 Sí, Belinda? 1271 01:04:17,482 --> 01:04:21,258 >> AUDIENCIA: Cuando se utiliza ===, Es este el único caso? 1272 01:04:21,258 --> 01:04:22,210 ¿O hay otros? 1273 01:04:22,210 --> 01:04:26,815 >> ZAMYLA CHAN: Así que en este caso, === es una comparación entre los tipos. 1274 01:04:26,815 --> 01:04:29,870 1275 01:04:29,870 --> 01:04:34,050 Lo siento. === Es una comparación que compara los tipos. 1276 01:04:34,050 --> 01:04:37,620 Y entonces == compara todos los tipos. 1277 01:04:37,620 --> 01:04:41,620 >> AUDIENCIA: ¿Puede explicar qué filas se encuentra en esta situación? 1278 01:04:41,620 --> 01:04:45,120 ¿Es la fila de los datos? 1279 01:04:45,120 --> 01:04:48,100 >> ZAMYLA CHAN: En la siguiente diapositiva, estoy voy a explicar lo que es filas. 1280 01:04:48,100 --> 01:04:49,890 Así que si no te importa la celebración de fuera de eso. 1281 01:04:49,890 --> 01:04:50,620 Y luego por la espalda? 1282 01:04:50,620 --> 01:04:54,699 >> AUDIENCIA: Para funciones como consulta, prestar y pedir disculpas [inaudible]? 1283 01:04:54,699 --> 01:04:59,050 1284 01:04:59,050 --> 01:05:03,050 >> ZAMYLA CHAN: La pregunta era si estas funciones - de consulta, se disculpan, 1285 01:05:03,050 --> 01:05:04,510 y hacer - 1286 01:05:04,510 --> 01:05:05,930 son comunes en PHP. 1287 01:05:05,930 --> 01:05:09,460 Estos son los que CS50 escribió para pset7. 1288 01:05:09,460 --> 01:05:09,910 Y Jay? 1289 01:05:09,910 --> 01:05:15,333 >> AUDIENCIA: Cuando tenga que decir $ _SESSION, Es que sólo para los ID? 1290 01:05:15,333 --> 01:05:17,310 O puede que haya dicho eso aquí? 1291 01:05:17,310 --> 01:05:23,440 >> ZAMYLA CHAN: Así que la pregunta era, cuando utilizamos $ _SESSION, eso fue una específica 1292 01:05:23,440 --> 01:05:25,290 variable global que estamos usando. 1293 01:05:25,290 --> 01:05:32,080 Aquí esta variable se va a ser local en nuestra función. 1294 01:05:32,080 --> 01:05:36,588 Así que estamos declarando una nueva variable. 1295 01:05:36,588 --> 01:05:38,460 >> AUDIENCIA: ¿Cómo es pedir disculpas implementado? 1296 01:05:38,460 --> 01:05:40,960 >> ZAMYLA CHAN: La pregunta era, cómo es disculparme implementado? 1297 01:05:40,960 --> 01:05:44,180 Y creo que esto es en realidad una muy buenas prácticas para ustedes para entrar en 1298 01:05:44,180 --> 01:05:49,260 la sección functions.php y mirar disculpas y ver cómo se puede tener 1299 01:05:49,260 --> 01:05:50,670 hecho a sí mismo. 1300 01:05:50,670 --> 01:05:55,620 Así que puede dejar eso a usted, pero sólo dice que si nos fijamos en disculpas, 1301 01:05:55,620 --> 01:06:02,110 entonces toma el mensaje que presentó a pedir disculpas, y luego se 1302 01:06:02,110 --> 01:06:06,570 hace que ese mensaje. 1303 01:06:06,570 --> 01:06:08,240 ¿Alguna pregunta más? 1304 01:06:08,240 --> 01:06:08,710 Me encanta preguntas. 1305 01:06:08,710 --> 01:06:09,555 Así que les harán. 1306 01:06:09,555 --> 01:06:11,888 >> AUDIENCIA: [inaudible] 1307 01:06:11,888 --> 01:06:13,840 echo o print allí? 1308 01:06:13,840 --> 01:06:15,900 >> ZAMYLA CHAN: La pregunta era, podríamos no sólo hemos puesto 1309 01:06:15,900 --> 01:06:17,000 echo o print allí. 1310 01:06:17,000 --> 01:06:19,710 Así que eso hubiera hecho algo ligeramente diferente. 1311 01:06:19,710 --> 01:06:23,750 Eso habría impreso consulta fallado en que - 1312 01:06:23,750 --> 01:06:27,420 así, en este momento, estamos en realidad en nuestro controlador. 1313 01:06:27,420 --> 01:06:30,350 Así que en realidad no tenemos HTML fijado aquí. 1314 01:06:30,350 --> 01:06:34,946 Pedir disculpas por la prestación apologize.php en realidad le redirige a apology.php. 1315 01:06:34,946 --> 01:06:39,560 1316 01:06:39,560 --> 01:06:42,200 Aceptar. 1317 01:06:42,200 --> 01:06:45,880 >> Así que ahora, vamos a abordar el pregunta de antes sobre lo que 1318 01:06:45,880 --> 01:06:47,330 Realmente es filas. 1319 01:06:47,330 --> 01:06:51,960 Bueno, consulta devolverá un conjunto de filas. 1320 01:06:51,960 --> 01:06:55,020 Y cada fila se representa por una matriz asociativa. 1321 01:06:55,020 --> 01:07:02,840 Así que si yo he ejecutado alguna consulta SQL y He almacenado el resultado en filas, entonces 1322 01:07:02,840 --> 01:07:07,850 utilizando un bucle foreach, entonces la matriz nombre es el primero en llegar - filas. 1323 01:07:07,850 --> 01:07:13,170 Y luego voy a llamar cada fila hay $ row. 1324 01:07:13,170 --> 01:07:20,060 >> Así iteración en eso, puedo entonces acceder a la columna el nombre de la fila dada, 1325 01:07:20,060 --> 01:07:22,340 columna de año, y la columna casa. 1326 01:07:22,340 --> 01:07:28,010 Tenga en cuenta que yo no habría sido capaz de hacer esto con las filas, ya que el índice filas 1327 01:07:28,010 --> 01:07:29,290 nombre no existe. 1328 01:07:29,290 --> 01:07:31,970 Filas es sólo un conjunto de matrices asociativas. 1329 01:07:31,970 --> 01:07:34,870 Así que hay dos niveles de allí. 1330 01:07:34,870 --> 01:07:37,170 Una vez que tenga el conjunto de filas, usted tiene que entrar en eso. 1331 01:07:37,170 --> 01:07:39,110 Y entonces usted puede tener acceso a las columnas. 1332 01:07:39,110 --> 01:07:41,636 ¿Eso es claro? 1333 01:07:41,636 --> 01:07:42,520 Sí, en frente? 1334 01:07:42,520 --> 01:07:45,490 >> AUDIENCIA: [inaudible] abrir soportes para [inaudible]? 1335 01:07:45,490 --> 01:07:46,220 >> ZAMYLA CHAN: Perdón? 1336 01:07:46,220 --> 01:07:49,740 >> AUDIENCIA: Los soportes abiertos. 1337 01:07:49,740 --> 01:07:52,420 >> ZAMYLA CHAN: Estas aquí? 1338 01:07:52,420 --> 01:07:58,520 Eso es lo que me permite incluir esa variable. 1339 01:07:58,520 --> 01:07:58,670 Sí. 1340 01:07:58,670 --> 01:08:01,900 >> AUDIENCIA: Antes de imprimir, es usted imprimir en el código HTML? 1341 01:08:01,900 --> 01:08:03,110 >> ZAMYLA CHAN: Si. 1342 01:08:03,110 --> 01:08:07,720 Cuando imprimo, esto aquí es el interior mi plantilla ahora, para 1343 01:08:07,720 --> 01:08:10,310 mi punto de vista del método de MVC. 1344 01:08:10,310 --> 01:08:12,750 Así que estoy imprimiendo en el HTML. 1345 01:08:12,750 --> 01:08:16,670 >> AUDIENCIA: Así que si nos fuimos al desarrollador herramientas después de la ejecución de este, podríamos 1346 01:08:16,670 --> 01:08:17,160 que en realidad en el código? 1347 01:08:17,160 --> 01:08:18,410 >> ZAMYLA CHAN: Esa es una gran pregunta, sí. 1348 01:08:18,410 --> 01:08:22,359 Así que si usted entró en las herramientas de desarrollo Firefox con Firebug o 1349 01:08:22,359 --> 01:08:26,109 Chrome, entonces sí, usted podría ver el código HTML específico. 1350 01:08:26,109 --> 01:08:28,470 Así que no mostraría $ row ["Nombre"]. 1351 01:08:28,470 --> 01:08:32,524 Esto mostraría que sea nombre está en esa fila. 1352 01:08:32,524 --> 01:08:36,268 >> AUDIENCIA: Sólo una cuestión general, lo que se tr y td define como? 1353 01:08:36,268 --> 01:08:37,672 ¿Por qué habría que [inaudible]? 1354 01:08:37,672 --> 01:08:41,850 1355 01:08:41,850 --> 01:08:44,814 >> ZAMYLA CHAN: tr fila Tabla, tabla a continuación td columna. 1356 01:08:44,814 --> 01:08:48,060 1357 01:08:48,060 --> 01:08:49,310 Aceptar. 1358 01:08:49,310 --> 01:08:55,771 1359 01:08:55,771 --> 01:08:56,835 >> AUDIENCIA: Sí, es datos de la tabla. 1360 01:08:56,835 --> 01:08:58,770 >> ZAMYLA CHAN: datos de la tabla. 1361 01:08:58,770 --> 01:08:59,894 Sí. 1362 01:08:59,894 --> 01:09:08,670 >> AUDIENCIA: Es una fila en la que el fila se trata como una columna? 1363 01:09:08,670 --> 01:09:08,910 >> ZAMYLA CHAN: Lo siento. 1364 01:09:08,910 --> 01:09:10,570 ¿Puede repetir eso? 1365 01:09:10,570 --> 01:09:14,450 >> AUDIENCIA: ¿Cómo visualizar filas? 1366 01:09:14,450 --> 01:09:16,310 >> ZAMYLA CHAN: ¿Cómo visualizar filas en qué tipo de forma? 1367 01:09:16,310 --> 01:09:21,796 ¿Estás hablando de estos filas de aquí o de las filas tr? 1368 01:09:21,796 --> 01:09:22,630 >> AUDIENCIA: Las filas. 1369 01:09:22,630 --> 01:09:25,229 >> ZAMYLA CHAN: Estas filas aquí? 1370 01:09:25,229 --> 01:09:28,620 Me imagino esto como Ejecuto mi consulta. 1371 01:09:28,620 --> 01:09:38,729 Y dice, bien, tengo ya sea de 0 a n cantidad de filas que coinciden con los criterios 1372 01:09:38,729 --> 01:09:40,510 que había consultado. 1373 01:09:40,510 --> 01:09:43,740 Así que tengo un número de filas. 1374 01:09:43,740 --> 01:09:51,450 Así filas, las filas, tiendas $ cada uno una de las filas de una matriz. 1375 01:09:51,450 --> 01:09:58,110 Así que incluso si es sólo uno de ellos, es todavía una serie de filas que coinciden con ella. 1376 01:09:58,110 --> 01:10:03,010 >> Así pues, por ejemplo, este es similar a cuando usted descabellada 1377 01:10:03,010 --> 01:10:05,390 la memoria caché de los usuarios. 1378 01:10:05,390 --> 01:10:10,810 Y los criterios allí era donde ID es igual al ID de sesión. 1379 01:10:10,810 --> 01:10:14,250 Hay realmente sólo una fila que podría coincidir con eso. 1380 01:10:14,250 --> 01:10:18,960 Pero aún filas acabamos de regresar de una fila. 1381 01:10:18,960 --> 01:10:22,620 Así que si tienes que ir a filas, el índice 0, caché de índice para 1382 01:10:22,620 --> 01:10:26,195 realmente llegar a su caché. 1383 01:10:26,195 --> 01:10:29,650 >> AUDIENCIA: ¿Es la función de impresión en eco de la misma cosa? 1384 01:10:29,650 --> 01:10:30,670 >> ZAMYLA CHAN: Si. 1385 01:10:30,670 --> 01:10:31,190 Sí. 1386 01:10:31,190 --> 01:10:33,304 Imprimir un eco de la misma. 1387 01:10:33,304 --> 01:10:42,400 >> AUDIENCIA: Es el bucle foreach la única forma de índice en filas? 1388 01:10:42,400 --> 01:10:46,110 >> ZAMYLA CHAN: Es un bucle foreach la única manera de que pueda 1389 01:10:46,110 --> 01:10:47,030 iterar por las filas? 1390 01:10:47,030 --> 01:10:47,180 No. 1391 01:10:47,180 --> 01:10:51,000 También puede utilizar un bucle for, siempre que usted sabe la longitud 1392 01:10:51,000 --> 01:10:53,024 de la matriz de la fila. 1393 01:10:53,024 --> 01:10:58,500 >> AUDIENCIA: ¿Puede acceder a él utilizando una fila como [inaudible]? 1394 01:10:58,500 --> 01:11:01,640 >> ZAMYLA CHAN: Así no se puede acceder a él sólo usar fila si usted no tiene un 1395 01:11:01,640 --> 01:11:05,160 bucle foreach siempre que no se ha declarado fila. 1396 01:11:05,160 --> 01:11:08,150 1397 01:11:08,150 --> 01:11:09,660 Sí. 1398 01:11:09,660 --> 01:11:10,810 Sí, en el blanco. 1399 01:11:10,810 --> 01:11:13,990 >> AUDIENCIA: Entonces, ¿qué tr y td hace? 1400 01:11:13,990 --> 01:11:16,790 >> ZAMYLA CHAN: Así que tr y td son etiquetas HTML. 1401 01:11:16,790 --> 01:11:19,590 TR indica el comienzo de una fila de tabla. 1402 01:11:19,590 --> 01:11:26,625 Y cada TD indica un columna de datos de la tabla nueva. 1403 01:11:26,625 --> 01:11:32,275 >> AUDIENCIA: Para una imagen visual de lo que una fila es como, imagínense el SQL, cómo 1404 01:11:32,275 --> 01:11:33,510 que tienen una fila. 1405 01:11:33,510 --> 01:11:35,980 [Inaudible]. 1406 01:11:35,980 --> 01:11:36,390 >> ZAMYLA CHAN: Si. 1407 01:11:36,390 --> 01:11:37,630 Eso es un gran punto. 1408 01:11:37,630 --> 01:11:41,510 Puedes visualizar filas como se acaba de como en una tabla de Excel, sólo 1409 01:11:41,510 --> 01:11:44,540 la lista de las filas. 1410 01:11:44,540 --> 01:11:46,870 Aceptar. 1411 01:11:46,870 --> 01:11:47,230 Está bien. 1412 01:11:47,230 --> 01:11:50,740 Así que ahora que hemos repasado seleccione, si no hay más preguntas, vamos a 1413 01:11:50,740 --> 01:11:52,970 ir a insertar. 1414 01:11:52,970 --> 01:11:58,220 Así que si yo quería insertar en algunos tabla e inserte determinada columna 1415 01:11:58,220 --> 01:12:02,320 valores, yo podría meterme en Ravenclaw en el año 7. 1416 01:12:02,320 --> 01:12:07,245 Pero a veces puede haber duplicado valores, como vimos en pset7 cuando 1417 01:12:07,245 --> 01:12:09,240 fueron actualizando nuestro portafolio. 1418 01:12:09,240 --> 01:12:15,610 >> Así que en este caso, queremos que se utilizan en DUPLICATE KEY UPDATE, para que no lo hacemos 1419 01:12:15,610 --> 01:12:18,280 almacenar múltiples filas con el mismo valorar sino actualizarlo. 1420 01:12:18,280 --> 01:12:21,780 1421 01:12:21,780 --> 01:12:25,560 Entonces en realidad tenemos la actualización, que no es un inserto. 1422 01:12:25,560 --> 01:12:30,100 Es sólo una actualización, donde se actualiza en un cierto mesa con un dado 1423 01:12:30,100 --> 01:12:34,403 criterios y luego, finalmente, eliminar, que hace una cosa muy similar. 1424 01:12:34,403 --> 01:12:40,200 >> AUDIENCIA: ¿Podría brevemente repasar la copia de la llave? 1425 01:12:40,200 --> 01:12:40,850 >> ZAMYLA CHAN: Si. 1426 01:12:40,850 --> 01:12:48,340 En esencia aquí, tengo INSERT INTO Gringotts, es, galeones, estos valores. 1427 01:12:48,340 --> 01:12:56,900 Pero Identificación, presumiblemente, es una clave única valor establecido en la tabla de MySQL. 1428 01:12:56,900 --> 01:13:06,750 Así que si ya he dicho ID de configurar, entonces no puedo insertar una nueva fila. 1429 01:13:06,750 --> 01:13:10,961 Así que si no existe ya, entonces tengo que actualizarlo. 1430 01:13:10,961 --> 01:13:16,040 1431 01:13:16,040 --> 01:13:17,722 En el centro en el blanco. 1432 01:13:17,722 --> 01:13:21,570 >> AUDIENCIA: Así insertar, actualizar, eliminar, y selección, son los disponibles 1433 01:13:21,570 --> 01:13:22,875 localmente [inaudible]? 1434 01:13:22,875 --> 01:13:27,320 1435 01:13:27,320 --> 01:13:29,630 >> ZAMYLA CHAN: Entonces inserte, actualización, eliminación y 1436 01:13:29,630 --> 01:13:31,120 seleccionar son todas las consultas SQL. 1437 01:13:31,120 --> 01:13:34,970 Así que cuando usted está utilizando SQL, tendrás los disponibles. 1438 01:13:34,970 --> 01:13:38,226 1439 01:13:38,226 --> 01:13:40,706 >> AUDIENCIA: Volver a los últimos concursos - 1440 01:13:40,706 --> 01:13:44,178 había una pregunta que trataba de si usted tenía una mesa y quiso 1441 01:13:44,178 --> 01:13:52,610 insertar resultados de las pruebas en uno y se inserta su nombre, así que no te deja 1442 01:13:52,610 --> 01:13:54,594 [Inaudible] puntuación de la prueba de su amigo. 1443 01:13:54,594 --> 01:13:59,060 ¿Cómo hacer eso con inserción? 1444 01:13:59,060 --> 01:14:02,490 >> ZAMYLA CHAN: Así que la pregunta era sobre una pregunta anterior de mitad de período. 1445 01:14:02,490 --> 01:14:04,320 No estoy al tanto de los cuales uno que es en estos momentos. 1446 01:14:04,320 --> 01:14:06,790 Así que tal vez después, si quieres venir y mostrarme, entonces yo puedo 1447 01:14:06,790 --> 01:14:08,155 sin duda le dará consejos. 1448 01:14:08,155 --> 01:14:11,250 1449 01:14:11,250 --> 01:14:15,460 Pero hablando de cosas de inserción, como teniendo la calificación de alguien cuando 1450 01:14:15,460 --> 01:14:18,800 no debe, vamos a hablar de Los ataques de inyección SQL. 1451 01:14:18,800 --> 01:14:22,050 Así que un ataque de inyección SQL es esencialmente donde alguien toma 1452 01:14:22,050 --> 01:14:27,680 ventaja de la baja seguridad de la camino que está tomando en los datos. 1453 01:14:27,680 --> 01:14:35,660 >> Así que aquí, al igual que en las finanzas CS50, cuando ha entrado como podemos entrar en un 1454 01:14:35,660 --> 01:14:39,510 nombre de usuario en el formulario de acceso, el primer cuadro de texto y 1455 01:14:39,510 --> 01:14:41,570 a continuación, introduzca una contraseña. 1456 01:14:41,570 --> 01:14:45,610 Tal vez nuestro código PHP puede tener un aspecto algo como esto, donde $ usuario 1457 01:14:45,610 --> 01:14:51,410 es el nombre de usuario y contraseña de los datos después es la contraseña de post-data. 1458 01:14:51,410 --> 01:14:55,110 Y luego pues sólo ejecutamos nuestra consulta, por ejemplo, OK, bueno, nuestra consulta se va a 1459 01:14:55,110 --> 01:14:57,990 seleccionar de nuestros usuarios, en donde el nombre de usuario es la 1460 01:14:57,990 --> 01:14:58,970 uno que se sometieron. 1461 01:14:58,970 --> 01:15:06,870 Y la contraseña es la contraseña, lo que significa que las contraseñas coinciden. 1462 01:15:06,870 --> 01:15:12,670 >> Ahora, ¿qué pasaría si en lugar de realmente la presentación de una contraseña real, al igual que 1463 01:15:12,670 --> 01:15:16,850 12345 y adivinando púa que dice contraseña y que intenta cortar su 1464 01:15:16,850 --> 01:15:21,460 cuenta, ¿qué pasaría si en lugar presentaron este. 1465 01:15:21,460 --> 01:15:24,380 Podrían escribir tal vez adivinar una contraseña. 1466 01:15:24,380 --> 01:15:30,480 Y luego iban a terminar la cita a continuación, escriba o 1 = 1. 1467 01:15:30,480 --> 01:15:35,160 Eso sería pasearse directamente en el SQL consultar a ver algo como esto. 1468 01:15:35,160 --> 01:15:38,200 Seleccione entre los usuarios donde nombre de usuario = dientes y contraseña 1469 01:15:38,200 --> 01:15:41,450 iguales lirio o 1 = 1. 1470 01:15:41,450 --> 01:15:45,450 >> Así que, o la contraseña de cuenta ser correcta o 1 = 1, 1471 01:15:45,450 --> 01:15:47,870 que siempre es cierto. 1472 01:15:47,870 --> 01:15:52,780 Así que en este caso, básicamente, un usuario puede tomar ventaja de esto y sólo tienes que entrar 1473 01:15:52,780 --> 01:15:55,240 sí mismos y truco la cuenta de alguien. 1474 01:15:55,240 --> 01:15:58,950 Así que por eso queremos evitar alguien tiene que hacer esto. 1475 01:15:58,950 --> 01:16:03,890 Pero por suerte, la función de consulta por pasando los marcadores de posición se llevará 1476 01:16:03,890 --> 01:16:04,800 cargo de esto para usted. 1477 01:16:04,800 --> 01:16:08,570 Además, por lo general va nunca quiere que presentar efectivamente las contraseñas 1478 01:16:08,570 --> 01:16:09,310 a sí mismos. 1479 01:16:09,310 --> 01:16:14,115 Es por eso que con hash o cifrado en las finanzas CS50. 1480 01:16:14,115 --> 01:16:17,553 >> AUDIENCIA: El cuestionario pasado habló sobre las cadenas de escape de MySQL. 1481 01:16:17,553 --> 01:16:21,800 ¿Tenemos que preocuparnos por eso? 1482 01:16:21,800 --> 01:16:22,670 >> ZAMYLA CHAN: Esa es una buena pregunta. 1483 01:16:22,670 --> 01:16:29,050 Las cadenas de escape de MySQL es sin duda un la función que se utilizó en nuestra consulta. 1484 01:16:29,050 --> 01:16:30,420 Pero sin duda mirar en eso. 1485 01:16:30,420 --> 01:16:32,950 Yo diría que eso es un juego justo para saber que lo que se necesita para llamar a ese 1486 01:16:32,950 --> 01:16:34,370 funcionar en una cuerda. 1487 01:16:34,370 --> 01:16:35,245 Sí, Belinda? 1488 01:16:35,245 --> 01:16:38,606 >> AUDIENCIA: ¿Cómo sabes cuándo es comillas simples o dobles? 1489 01:16:38,606 --> 01:16:43,516 Y también, me siento como en la conferencia que mencionado algo acerca de no tener 1490 01:16:43,516 --> 01:16:48,426 la [inaudible] o algo o el segunda comilla simple al final. 1491 01:16:48,426 --> 01:16:56,407 1492 01:16:56,407 --> 01:17:00,825 Creo que él señaló en la conferencia que que se supone que tienen apóstrofe 1 1493 01:17:00,825 --> 01:17:04,290 y luego no tener apóstrofes o algo así. 1494 01:17:04,290 --> 01:17:05,540 >> AUDIENCIA: [inaudible]. 1495 01:17:05,540 --> 01:17:14,860 1496 01:17:14,860 --> 01:17:18,657 >> AUDIENCIA: La cosa es el último single cita allí en ese segundo cuadro 1497 01:17:18,657 --> 01:17:19,391 no debería estar allí. 1498 01:17:19,391 --> 01:17:21,840 [Inaudible] 1499 01:17:21,840 --> 01:17:26,730 Porque cuando usted toma ese último single Citando a cabo y que cumplan estas para el contenido 1500 01:17:26,730 --> 01:17:30,522 donde la clave es, si usted tiene que consulta, hay una sola cita en 1501 01:17:30,522 --> 01:17:31,340 el final ya. 1502 01:17:31,340 --> 01:17:36,580 Usted quiere usar esa comilla simple como la que se enfrenta el uno 1503 01:17:36,580 --> 01:17:37,574 [Inaudible]. 1504 01:17:37,574 --> 01:17:42,820 Entonces, ¿qué es en realidad en ese texto caja no debe tener eso. 1505 01:17:42,820 --> 01:17:44,070 >> ZAMYLA CHAN: Voy a cambiar eso. 1506 01:17:44,070 --> 01:17:56,490 1507 01:17:56,490 --> 01:17:56,880 Aceptar. 1508 01:17:56,880 --> 01:18:00,435 Si no hay preguntas, entonces lo voy a hacer pasarlo por alto a José hablar 1509 01:18:00,435 --> 01:18:04,332 acerca de JavaScript, etcétera. 1510 01:18:04,332 --> 01:18:09,540 >> [Aplausos] 1511 01:18:09,540 --> 01:18:11,660 >> JOSÉ ONG: ¿Así que se están ejecutando un poco atrás. 1512 01:18:11,660 --> 01:18:13,280 Así que si usted tiene que dejar, eso está bien. 1513 01:18:13,280 --> 01:18:16,540 Pero le pedimos que mantenga sus cabezas hacia abajo si estás en el medio, por lo que 1514 01:18:16,540 --> 01:18:19,560 no bloquee la cámara y utiliza la puerta de atrás si es necesario. 1515 01:18:19,560 --> 01:18:25,010 1516 01:18:25,010 --> 01:18:26,306 Yo soy José, por cierto. 1517 01:18:26,306 --> 01:18:27,556 Hola. 1518 01:18:27,556 --> 01:18:37,910 1519 01:18:37,910 --> 01:18:38,630 Prueba, prueba. 1520 01:18:38,630 --> 01:18:39,630 Dan, es tan bueno? 1521 01:18:39,630 --> 01:18:40,880 Genial. 1522 01:18:40,880 --> 01:18:44,460 1523 01:18:44,460 --> 01:18:47,600 >> Así que el video también se publicará en línea para aquellos que 1524 01:18:47,600 --> 01:18:48,850 tiene que irse ahora. 1525 01:18:48,850 --> 01:18:51,350 1526 01:18:51,350 --> 01:18:52,600 Awkward. 1527 01:18:52,600 --> 01:18:56,300 1528 01:18:56,300 --> 01:18:57,510 Aceptar. 1529 01:18:57,510 --> 01:18:59,730 Así revisión del cuestionario. 1530 01:18:59,730 --> 01:19:00,980 Este es un gato. 1531 01:19:00,980 --> 01:19:03,150 1532 01:19:03,150 --> 01:19:07,170 Ahora, JavaScript, lo que tal vez no sea aww como para algunos de ustedes. 1533 01:19:07,170 --> 01:19:07,370 Aceptar. 1534 01:19:07,370 --> 01:19:09,280 Así que eso es lo primero, recuerdan desde Zamyla. 1535 01:19:09,280 --> 01:19:11,270 Recuerda que PHP es ejecutar en el servidor. 1536 01:19:11,270 --> 01:19:15,230 Y muchas veces, ustedes escribieron bucles en PHP para imprimir HTML, ¿verdad? 1537 01:19:15,230 --> 01:19:19,170 Así que una vez que se ejecute el código, que Salida HTML que imprima 1538 01:19:19,170 --> 01:19:20,500 se envía al usuario. 1539 01:19:20,500 --> 01:19:25,960 Y una vez que eso sucede, no más de PHP puede ejecutarse, a menos que vuelva a cargar la página, de 1540 01:19:25,960 --> 01:19:27,660 Por supuesto, que reexecutes el PHP. 1541 01:19:27,660 --> 01:19:30,080 Pero una vez que imprimas que HTML, usted no puede ir a ninguna parte. 1542 01:19:30,080 --> 01:19:33,580 >> Así que el HTML se envía a través para el usuario, que es el navegador por aquí, donde 1543 01:19:33,580 --> 01:19:35,470 Milo está usando la computadora. 1544 01:19:35,470 --> 01:19:40,340 Y tan bien, hay varias cosas una vez que enviamos HTML para el usuario. 1545 01:19:40,340 --> 01:19:43,350 A veces queremos hacer algo como al hacer clic en algo, queremos 1546 01:19:43,350 --> 01:19:47,350 cajas de alerta para que aparezca, ese tipo de interacciones, como cuando se pulsa el 1547 01:19:47,350 --> 01:19:50,740 clave, al hacer clic en algo en el página, quiero que algo suceda. 1548 01:19:50,740 --> 01:19:54,550 Bueno, no se puede volver a ejecutar PHP código una vez que el HTML se establece. 1549 01:19:54,550 --> 01:19:55,900 Entonces, ¿cómo hacer esto? 1550 01:19:55,900 --> 01:19:59,930 >> Se introduce un nuevo lenguaje llamado JavaScript, que se ejecuta en el navegador 1551 01:19:59,930 --> 01:20:02,890 que le permite hacer las cosas a HTML después de recibir 1552 01:20:02,890 --> 01:20:04,020 ellos desde el servidor. 1553 01:20:04,020 --> 01:20:07,050 Y es por eso que lo llamamos un lado del cliente lenguaje de programación. 1554 01:20:07,050 --> 01:20:09,110 Trabaja en su ordenador - 1555 01:20:09,110 --> 01:20:11,400 el cliente. 1556 01:20:11,400 --> 01:20:13,830 ¿Una pregunta sobre que tan lejos? 1557 01:20:13,830 --> 01:20:15,650 Ese paradigma tiene sentido para la gente? 1558 01:20:15,650 --> 01:20:16,010 Aceptar. 1559 01:20:16,010 --> 01:20:16,790 Bueno. 1560 01:20:16,790 --> 01:20:17,340 Está bien. 1561 01:20:17,340 --> 01:20:20,850 Así que lo primero a tener en cuenta Se JavaScript no es PHP. 1562 01:20:20,850 --> 01:20:23,010 >> Ellos tienen una sintaxis diferente, que vamos a entrar en. 1563 01:20:23,010 --> 01:20:24,530 Y tienen usos muy diferentes. 1564 01:20:24,530 --> 01:20:26,640 JavaScript, de nuevo, para su navegador, para el cliente. 1565 01:20:26,640 --> 01:20:30,640 Server se ejecuta en algún lugar de otra persona ordenador que envía información 1566 01:20:30,640 --> 01:20:31,720 a usted, ¿verdad? 1567 01:20:31,720 --> 01:20:36,730 Así que si le pedimos que escribir código PHP en una pregunta de examen, no escriba 1568 01:20:36,730 --> 01:20:38,710 JavaScript y viceversa. 1569 01:20:38,710 --> 01:20:41,710 Usted acaba de perder puntos, y no va a estar en lo cierto. 1570 01:20:41,710 --> 01:20:43,690 >> Así que vamos a entrar en algunos diferencias de sintaxis - 1571 01:20:43,690 --> 01:20:46,140 JavaScript en la izquierda y PHP a la derecha. 1572 01:20:46,140 --> 01:20:48,670 La primera cosa que usted notará con JavaScript declaramos las variables con 1573 01:20:48,670 --> 01:20:49,440 la palabra clave var - 1574 01:20:49,440 --> 01:20:53,590 V-A-R. PHP utiliza el signo de dólar, como Zamyla discutido anteriormente. 1575 01:20:53,590 --> 01:20:57,570 Si desea declarar un asociativa matriz, vemos la sintaxis familiar en 1576 01:20:57,570 --> 01:20:59,030 el lado derecho con PHP. 1577 01:20:59,030 --> 01:21:01,630 En el lado izquierdo, en lugar utiliza llaves. 1578 01:21:01,630 --> 01:21:03,280 Y luego están sus llaves a la izquierda. 1579 01:21:03,280 --> 01:21:04,670 Entonces usted tiene un colon. 1580 01:21:04,670 --> 01:21:06,560 Y entonces usted tiene los valores que desee. 1581 01:21:06,560 --> 01:21:09,840 >> Así que esta es la forma en que lo haría en PHP en el lado derecho con que segundo 1582 01:21:09,840 --> 01:21:10,955 línea que comienza en Milo. 1583 01:21:10,955 --> 01:21:14,540 Y así es como lo harías en la lado izquierdo de JavaScript si desea 1584 01:21:14,540 --> 01:21:16,110 lo que llamamos un objeto. 1585 01:21:16,110 --> 01:21:19,340 Y los objetos en JavaScript son sólo matrices asociativas. 1586 01:21:19,340 --> 01:21:23,710 Así que si quieres tener acceso a los campos, en PHP utiliza esta sintaxis soporte. 1587 01:21:23,710 --> 01:21:27,170 Y de esta manera, se puede reasignar este campo propietario a Lauren. 1588 01:21:27,170 --> 01:21:30,150 >> Bueno, en JavaScript, si uno quiere acceso a un campo y cambiarlo, usted puede 1589 01:21:30,150 --> 01:21:31,370 utilizar la sintaxis con punto. 1590 01:21:31,370 --> 01:21:33,860 También puede utilizar la sintaxis de soporte. 1591 01:21:33,860 --> 01:21:35,550 Pero no se puede utilizar el dot sintaxis en PHP. 1592 01:21:35,550 --> 01:21:36,525 Eso no funcionará. 1593 01:21:36,525 --> 01:21:38,910 Sólo funciona en PHP. 1594 01:21:38,910 --> 01:21:42,060 Y, por último, para imprimir las cosas al consola, utilice console.log, que 1595 01:21:42,060 --> 01:21:43,720 ustedes utilizan una gran cantidad de pset8. 1596 01:21:43,720 --> 01:21:45,260 Puede console.log eso. 1597 01:21:45,260 --> 01:21:50,030 >> Si desea imprimir una matriz en PHP, usted tiene que utilizar la impresión r. 1598 01:21:50,030 --> 01:21:53,240 Y en el lado derecho, se ve Hachís concatenación de cadenas de allá. 1599 01:21:53,240 --> 01:21:54,070 Alguien le preguntó antes. 1600 01:21:54,070 --> 01:21:55,850 Yo uso un plus en JavaScript. 1601 01:21:55,850 --> 01:21:59,800 Si quiero algo concatenar en PHP, yo uso el punto. 1602 01:21:59,800 --> 01:22:00,800 Estos son diferentes. 1603 01:22:00,800 --> 01:22:03,420 Si estás escribiendo código PHP, no utilice un plus. 1604 01:22:03,420 --> 01:22:06,810 Si estás escribiendo JavaScript código, no escriba un punto. 1605 01:22:06,810 --> 01:22:08,230 Será equivocado. 1606 01:22:08,230 --> 01:22:09,640 Y estarás triste. 1607 01:22:09,640 --> 01:22:11,000 >> Así que las diferencias de sintaxis. 1608 01:22:11,000 --> 01:22:14,710 Conozca a su sintaxis, porque si tiene que escribir una pregunta y utiliza la sintaxis 1609 01:22:14,710 --> 01:22:16,890 Del idioma equivocado, no va a funcionar. 1610 01:22:16,890 --> 01:22:19,520 Y va a estar mal. 1611 01:22:19,520 --> 01:22:22,420 Así que vamos a hablar un poco de control diferencias de flujo, cómo lo usa 1612 01:22:22,420 --> 01:22:24,040 bucles en cada uno de ellos. 1613 01:22:24,040 --> 01:22:26,610 Zamyla fue por arriba del lado derecho. 1614 01:22:26,610 --> 01:22:27,780 Las cosas en el lado derecho debe estar familiarizado. 1615 01:22:27,780 --> 01:22:29,670 Veamos en el lado izquierdo. 1616 01:22:29,670 --> 01:22:34,830 >> Cuando se utiliza para n bucle en JavaScript, la variable de bucle, var i de allá, 1617 01:22:34,830 --> 01:22:37,210 lazo sobre las claves de la matriz. 1618 01:22:37,210 --> 01:22:39,150 Así que usted vea el nombre, la casa, y el papel. 1619 01:22:39,150 --> 01:22:42,440 Si console.log i, recibo nombre, casa, y el papel. 1620 01:22:42,440 --> 01:22:44,720 Esas son las claves. 1621 01:22:44,720 --> 01:22:50,080 En JavaScript, un bucle foreach va en los valores de esta matriz. 1622 01:22:50,080 --> 01:22:52,040 Entonces te das cuenta que ambos son i. 1623 01:22:52,040 --> 01:22:56,000 Pero aquí en el lado de PHP, se imprime a Milo, CS50, y la mascota. 1624 01:22:56,000 --> 01:22:57,390 Esos son los valores en PHP. 1625 01:22:57,390 --> 01:23:00,180 >> Así que estos son cómo estos dos son diferentes en los diferentes idiomas. 1626 01:23:00,180 --> 01:23:02,970 Así que si usted está usando un foreach loop, no asuma que se 1627 01:23:02,970 --> 01:23:03,760 le da las llaves. 1628 01:23:03,760 --> 01:23:08,010 Y si usted está usando un lazo para n, no lo hagas asuma que le da los valores. 1629 01:23:08,010 --> 01:23:10,420 ¿Esto tiene sentido hasta ahora? 1630 01:23:10,420 --> 01:23:13,630 La siguiente diapositiva se va a mostrar cómo se puede acceder a todo lo contrario en 1631 01:23:13,630 --> 01:23:15,160 cada uno de ellos. 1632 01:23:15,160 --> 01:23:18,550 >> Bueno, si usted tiene la llave en JavaScript y desea que el valor de salida, 1633 01:23:18,550 --> 01:23:20,440 que acaba de índice en la matriz con eso. 1634 01:23:20,440 --> 01:23:23,640 Entonces Milo de i le conseguirá lo usted quiere - los valores. 1635 01:23:23,640 --> 01:23:25,260 Hay una sintaxis diferente en PHP. 1636 01:23:25,260 --> 01:23:28,140 Si realmente quieres saberlo, no lo sé pensamos que hemos mostramos a usted todavía. 1637 01:23:28,140 --> 01:23:31,740 Pero si usted está interesado, puede utilizar esta sintaxis adicional a la derecha 1638 01:23:31,740 --> 01:23:35,130 lado que en realidad le permitirá obtener la llaves en PHP cuando se está utilizando un 1639 01:23:35,130 --> 01:23:35,880 bucle foreach. 1640 01:23:35,880 --> 01:23:39,640 Así que un poco de trivia si usted está interesado. 1641 01:23:39,640 --> 01:23:42,630 >> Así que eso es sólo para demostrar la diferencias entre estos dos bucles. 1642 01:23:42,630 --> 01:23:47,060 No los mezcle hasta cuando estás programar una pregunta. 1643 01:23:47,060 --> 01:23:49,774 ¿Una pregunta sobre eso. 1644 01:23:49,774 --> 01:23:50,770 Genial. 1645 01:23:50,770 --> 01:23:51,310 Está bien. 1646 01:23:51,310 --> 01:23:52,250 JavaScript objetos. 1647 01:23:52,250 --> 01:23:53,040 Hablé acerca de ellos. 1648 01:23:53,040 --> 01:23:54,650 Son como matrices asociativas. 1649 01:23:54,650 --> 01:23:57,730 La única cosa que me gustaría que tenga en cuenta aquí es que un valor en un asociativa 1650 01:23:57,730 --> 01:23:59,540 matriz puede ser cualquier cosa en JavaScript. 1651 01:23:59,540 --> 01:24:02,240 >> Incluso puede ser una función, como allá. 1652 01:24:02,240 --> 01:24:04,600 Tengo una función que es un valor de una clave. 1653 01:24:04,600 --> 01:24:07,030 Y si quiero llamar a esa función, Acabo de acceder a la corteza. 1654 01:24:07,030 --> 01:24:08,490 Y entonces me puse entre paréntesis después de eso. 1655 01:24:08,490 --> 01:24:09,790 Y eso funciona. 1656 01:24:09,790 --> 01:24:15,570 Así que ¿alguna pregunta? 1657 01:24:15,570 --> 01:24:16,370 No? 1658 01:24:16,370 --> 01:24:16,650 Aceptar. 1659 01:24:16,650 --> 01:24:18,190 Bueno. 1660 01:24:18,190 --> 01:24:20,130 JavaScript, como PHP, está vagamente escrito. 1661 01:24:20,130 --> 01:24:20,970 ¿Qué significa eso? 1662 01:24:20,970 --> 01:24:22,380 >> Se tiene tipos. 1663 01:24:22,380 --> 01:24:24,800 Pero cuando se declara una JavaScript variable, se dice var i. 1664 01:24:24,800 --> 01:24:25,850 Usted no lo dice. 1665 01:24:25,850 --> 01:24:26,460 Eso no es nada. 1666 01:24:26,460 --> 01:24:28,000 Usted acaba de decir que es una variable. 1667 01:24:28,000 --> 01:24:31,590 Y luego JavaScript se encargará de la tipos bajo el capó para usted. 1668 01:24:31,590 --> 01:24:34,390 Podemos convertir libremente entre tipos debido a esto. 1669 01:24:34,390 --> 01:24:37,360 Así que empieza como una serie en este caso. 1670 01:24:37,360 --> 01:24:38,790 Y luego tengo una cadena. 1671 01:24:38,790 --> 01:24:39,710 Y añado yo a ella. 1672 01:24:39,710 --> 01:24:41,810 Y yo reasignar de nuevo en i. 1673 01:24:41,810 --> 01:24:43,640 >> Así que en esa primera línea, i es el número. 1674 01:24:43,640 --> 01:24:47,310 En la segunda línea, ahora se convierte en un cadena después de hacer la reasignación. 1675 01:24:47,310 --> 01:24:52,820 Y aquí, sólo estoy concatenando ese número en la cadena. 1676 01:24:52,820 --> 01:24:56,210 Así que ya ves que a pesar de que yo era un entero en la primera parte, es una especie 1677 01:24:56,210 --> 01:24:58,500 de como ser convertido a un cadena y luego se añade 1678 01:24:58,500 --> 01:25:00,510 en esa cadena hola. 1679 01:25:00,510 --> 01:25:02,340 Y eso es lo que quiero decir por la tipificación suelto. 1680 01:25:02,340 --> 01:25:04,760 Eso es que permite convertir entre tipos muy fácilmente. 1681 01:25:04,760 --> 01:25:08,840 Y no lanza advertencias a usted como C hace. 1682 01:25:08,840 --> 01:25:12,420 >> Así que ahora contiene hola 123 a la cadena. 1683 01:25:12,420 --> 01:25:13,270 Siguiente. 1684 01:25:13,270 --> 01:25:15,610 También podemos comparar libremente entre los tipos. 1685 01:25:15,610 --> 01:25:19,310 Así que si usted sólo tiene que utilizar ==, mucho como en PHP, JavaScript 1686 01:25:19,310 --> 01:25:20,480 hace una cosa similar. 1687 01:25:20,480 --> 01:25:24,780 La cadena 123 es el mismo que el número 123 cuando se utiliza igual doble. 1688 01:25:24,780 --> 01:25:27,820 Cuando se utiliza iguales triples, también quiere asegurarse de que 1689 01:25:27,820 --> 01:25:29,240 el tipo es el mismo. 1690 01:25:29,240 --> 01:25:31,960 Así que, ya que es una cadena y que es un número, a pesar de que ambos son 1691 01:25:31,960 --> 01:25:35,280 123, cuando se utiliza el triple iguales, se obtiene falsa. 1692 01:25:35,280 --> 01:25:39,330 En el doble es igual caso, se obtiene cierto, porque igual doble no lo hace 1693 01:25:39,330 --> 01:25:40,020 preocuparse por el tipo. 1694 01:25:40,020 --> 01:25:42,500 Iguales triples se preocupa por el tipo. 1695 01:25:42,500 --> 01:25:43,750 ¿Preguntas? 1696 01:25:43,750 --> 01:25:45,790 1697 01:25:45,790 --> 01:25:48,390 Aceptar. 1698 01:25:48,390 --> 01:25:52,870 >> Y otra cosa sobre JavaScript está alcance es una especie de mundial a menos que esté 1699 01:25:52,870 --> 01:25:53,460 en una función. 1700 01:25:53,460 --> 01:25:55,660 Y funciona de la misma manera en PHP realidad. 1701 01:25:55,660 --> 01:25:57,500 Así que vamos a ir a través de este ejemplo. 1702 01:25:57,500 --> 01:25:59,110 Me puse i 999. 1703 01:25:59,110 --> 01:26:00,900 Y después de entrar en este bucle. 1704 01:26:00,900 --> 01:26:06,110 Así que si estoy imprimiendo i en el presente para bucle, espero 0, 1, 2, 3, 4. 1705 01:26:06,110 --> 01:26:07,390 Llego a i = 4. 1706 01:26:07,390 --> 01:26:10,770 Incrementa i ahora a 5 en el final del bucle para. 1707 01:26:10,770 --> 01:26:13,300 Y entonces se rompe fuera de onda, ya que no cumple el 1708 01:26:13,300 --> 01:26:14,550 condicionar más. 1709 01:26:14,550 --> 01:26:16,650 >> ¿Qué te parece que el próximo console.log imprime? 1710 01:26:16,650 --> 01:26:20,570 1711 01:26:20,570 --> 01:26:24,790 Así que eso es lo que haría en C. En C, porque si tienes como var i fuera 1712 01:26:24,790 --> 01:26:28,855 y usted tiene var i dentro de un bucle, como un bucle, entonces hace que sea tal que 1713 01:26:28,855 --> 01:26:30,690 que es como alcance que los dos de i son diferentes. 1714 01:26:30,690 --> 01:26:34,630 En JavaScript, lo hará justo lo tratan como el mismo i. 1715 01:26:34,630 --> 01:26:37,870 Tengo 5, porque ese era el valor después de que salió fuera del bucle. 1716 01:26:37,870 --> 01:26:39,120 Así que esas íes son los mismos i. 1717 01:26:39,120 --> 01:26:42,620 1718 01:26:42,620 --> 01:26:44,130 ¿Eso tiene sentido? 1719 01:26:44,130 --> 01:26:45,720 >> Bueno, tiene sentido desde un punto de vista de JavaScript. 1720 01:26:45,720 --> 01:26:49,510 Pero el mismo paradigma no trasladará a C. Tienen 1721 01:26:49,510 --> 01:26:50,310 diferentes reglas de ámbito. 1722 01:26:50,310 --> 01:26:50,630 Sí. 1723 01:26:50,630 --> 01:26:52,566 >> AUDIENCIA: [inaudible] 1724 01:26:52,566 --> 01:26:54,990 fuera de la función [inaudible]? 1725 01:26:54,990 --> 01:26:58,340 >> JOSÉ ONG: ¿Así que fuera de la función? 1726 01:26:58,340 --> 01:27:00,810 Así que voy a llegar a eso en un segundo. 1727 01:27:00,810 --> 01:27:02,580 Así que llamamos foo (i). 1728 01:27:02,580 --> 01:27:06,920 Esto pasa en i foo, incrementos , y luego lo registra. 1729 01:27:06,920 --> 01:27:07,750 Así que era 5. 1730 01:27:07,750 --> 01:27:09,210 Por lo tanto, se convierte en 6. 1731 01:27:09,210 --> 01:27:11,670 Pero de lo que estoy hablando es de que yo en esa función. 1732 01:27:11,670 --> 01:27:14,430 Debido a que es un parámetro, es ámbito de esa función. 1733 01:27:14,430 --> 01:27:17,800 Así que una vez hecho, me levanto de la que función, ahora se va a ir 1734 01:27:17,800 --> 01:27:19,860 volver a la vieja i. 1735 01:27:19,860 --> 01:27:23,000 Que sólo está en el ámbito, ya que está en una función. 1736 01:27:23,000 --> 01:27:24,200 Y tenemos el alcance y funciones. 1737 01:27:24,200 --> 01:27:29,080 Pero no tenemos alcance fuera de funciones en JavaScript. 1738 01:27:29,080 --> 01:27:31,170 ¿Eso tiene sentido? 1739 01:27:31,170 --> 01:27:31,320 Sí. 1740 01:27:31,320 --> 01:27:31,660 Pregunta. 1741 01:27:31,660 --> 01:27:34,030 >> AUDIENCIA: Same [inaudible]? 1742 01:27:34,030 --> 01:27:34,500 >> JOSÉ ONG: Así que sí. 1743 01:27:34,500 --> 01:27:36,260 En PHP, que es el mismo tipo de cosas. 1744 01:27:36,260 --> 01:27:37,680 Hay una pequeña sutileza en realidad. 1745 01:27:37,680 --> 01:27:40,130 Pero usted me puede preguntar acerca de que después de la revisión. 1746 01:27:40,130 --> 01:27:43,930 Usted realmente no necesita saber que la sutileza de la prueba. 1747 01:27:43,930 --> 01:27:47,600 Para todos los efectos, como las variables, global y PHP, a menos que 1748 01:27:47,600 --> 01:27:49,150 están en una función, misma cosa en JavaScript. 1749 01:27:49,150 --> 01:27:49,480 Sí. 1750 01:27:49,480 --> 01:27:52,890 >> AUDIENCIA: ¿Por qué esta permitido en JavaScript y no en otro lugar? 1751 01:27:52,890 --> 01:27:55,010 >> JOSÉ ONG: ¿Entonces por qué se permitió en JavaScript y no en C? 1752 01:27:55,010 --> 01:27:58,180 Es que todo el que se le ocurrió JavaScript decidió que estaba bien en 1753 01:27:58,180 --> 01:27:59,510 JavaScript. 1754 01:27:59,510 --> 01:28:02,430 Así es como un lenguaje de programación convención como diríamos. 1755 01:28:02,430 --> 01:28:02,580 Sí. 1756 01:28:02,580 --> 01:28:04,480 >> AUDIENCIA: ¿Entonces por qué ir de 6 a 5? 1757 01:28:04,480 --> 01:28:08,280 >> JOSÉ ONG: ¿Así que se fue 6-5, porque cuando pasé yo en foo, que 1758 01:28:08,280 --> 01:28:13,420 i dentro de foo ahora tiene como alcance foo, porque existe un margen en funciones en 1759 01:28:13,420 --> 01:28:15,050 JavaScript. 1760 01:28:15,050 --> 01:28:18,720 Pero una vez que salga de aquí, porque fue ámbito de la función, sólo soy 1761 01:28:18,720 --> 01:28:24,300 utilizando el i regular que estaba dentro el resto del flujo de control. 1762 01:28:24,300 --> 01:28:25,210 Tiene sentido? 1763 01:28:25,210 --> 01:28:26,910 ¿Puedo pasar? 1764 01:28:26,910 --> 01:28:27,320 Está bien. 1765 01:28:27,320 --> 01:28:29,180 Genial. 1766 01:28:29,180 --> 01:28:31,890 >> La aceptación de esto es objetos se pasan por referencia. 1767 01:28:31,890 --> 01:28:33,990 Ya sabes lo que pasa una matriz en C pudieras 1768 01:28:33,990 --> 01:28:35,810 realmente modificar la matriz? 1769 01:28:35,810 --> 01:28:37,350 Es la misma cosa en JavaScript. 1770 01:28:37,350 --> 01:28:42,960 Si paso un objeto, en este caso, pasado Milo en esta función catify. 1771 01:28:42,960 --> 01:28:44,490 Milo comienza. 1772 01:28:44,490 --> 01:28:46,310 Su nombre es Milo plátano. 1773 01:28:46,310 --> 01:28:51,670 Me pase ese objeto en una función porque es un objeto, un asociativa 1774 01:28:51,670 --> 01:28:53,730 matriz en JavaScript. 1775 01:28:53,730 --> 01:28:57,110 >> Al realizar una operación en esa función, lo hará 1776 01:28:57,110 --> 01:28:58,560 realmente cambiar el objeto. 1777 01:28:58,560 --> 01:29:01,720 Así que esto sólo ocurrirá para los objetos en JavaScript, lo mismo que ocurre 1778 01:29:01,720 --> 01:29:09,230 para arreglos dentro del nombre de C. Así que Milo en realidad convertirse en gato ahora. 1779 01:29:09,230 --> 01:29:10,090 ¿Eso tiene sentido? 1780 01:29:10,090 --> 01:29:11,840 Así que esto sólo funciona para los objetos. 1781 01:29:11,840 --> 01:29:13,090 Los objetos se pasan por referencia. 1782 01:29:13,090 --> 01:29:13,400 Sí. 1783 01:29:13,400 --> 01:29:16,850 >> AUDIENCIA: ¿Estás diciendo que en contraste a la variable i. 1784 01:29:16,850 --> 01:29:17,240 >> JOSÉ ONG: Si. 1785 01:29:17,240 --> 01:29:20,330 ¿Qué variable i sólo estaba un número, ¿no? 1786 01:29:20,330 --> 01:29:25,280 Es como en C cuando se pasa un Integer, se hace una copia. 1787 01:29:25,280 --> 01:29:28,130 Y cuando se pasa una matriz, que en realidad cambia la matriz real en 1788 01:29:28,130 --> 01:29:32,870 C. Lo mismo ocurre con JavaScript en este caso. 1789 01:29:32,870 --> 01:29:34,070 Está bien. 1790 01:29:34,070 --> 01:29:38,134 Y al lado, Milo es triste porque ahora es un gato. 1791 01:29:38,134 --> 01:29:40,790 1792 01:29:40,790 --> 01:29:45,060 Eso fue en realidad Milo después algún viaje al veterinario. 1793 01:29:45,060 --> 01:29:46,860 >> Entonces, ¿cómo usamos JavaScript en una página web? 1794 01:29:46,860 --> 01:29:47,790 Podemos incluirlo. 1795 01:29:47,790 --> 01:29:50,090 Este es el código HTML con las etiquetas de la tira. 1796 01:29:50,090 --> 01:29:51,300 Así que tengo strip tags allí. 1797 01:29:51,300 --> 01:29:54,820 Y entonces me puse un poco de JavaScript código dentro de las etiquetas de script. 1798 01:29:54,820 --> 01:29:56,390 Y entonces se ejecuta esta. 1799 01:29:56,390 --> 01:29:58,830 Cuando sólo lo hago de esta manera, es llamado JavaScript inline. 1800 01:29:58,830 --> 01:30:02,400 Es un poco complicado, ya que el JavaScript es en realidad en el código HTML. 1801 01:30:02,400 --> 01:30:07,010 >> Una mejor manera de hacer esto, mucho mejor, es escribir tu JavaScript en una 1802 01:30:07,010 --> 01:30:10,920 archivo externo y, a continuación, proporcionar la etiqueta script con una fuente. 1803 01:30:10,920 --> 01:30:14,920 Y esto va a ir a ese archivo JavaScript y leer el código JavaScript de 1804 01:30:14,920 --> 01:30:15,960 ese archivo en su lugar. 1805 01:30:15,960 --> 01:30:18,820 Y de esta manera, usted no tiene una gran cantidad de JavaScript al comienzo de su 1806 01:30:18,820 --> 01:30:20,760 Archivo HTML, lo que hace Es realmente complicado. 1807 01:30:20,760 --> 01:30:21,860 Usted acaba de poner en otro lugar. 1808 01:30:21,860 --> 01:30:24,310 Y luego se va a leer desde allí. 1809 01:30:24,310 --> 01:30:25,560 ¿Eso tiene sentido? 1810 01:30:25,560 --> 01:30:27,990 1811 01:30:27,990 --> 01:30:29,640 >> Materia de colocación. 1812 01:30:29,640 --> 01:30:32,620 En este caso particular, el guión está antes que el cuerpo. 1813 01:30:32,620 --> 01:30:36,090 Así que cuando yo haga eso, no hay nada en el cuerpo todavía. 1814 01:30:36,090 --> 01:30:39,920 Tal vez esto te hará un poco más sentir cuando muestro la siguiente parte. 1815 01:30:39,920 --> 01:30:43,210 En este caso, la secuencia de comandos viene después de la div. 1816 01:30:43,210 --> 01:30:46,620 Así que el div aparece en realidad en la página primera. 1817 01:30:46,620 --> 01:30:49,470 Justo aquí, en este pequeño círculo rojo, ves que aparezca el texto. 1818 01:30:49,470 --> 01:30:51,810 Y entonces la alerta aparece. 1819 01:30:51,810 --> 01:30:54,890 >> En el primer caso, porque el guión fue antes de la div, el 1820 01:30:54,890 --> 01:30:56,170 alerta aparece en primer lugar. 1821 01:30:56,170 --> 01:30:59,250 Y entonces el div se presenta después de desecha la caja. 1822 01:30:59,250 --> 01:31:01,330 Así que la ejecución importa. 1823 01:31:01,330 --> 01:31:02,290 Así que vamos a mantener esto en mente. 1824 01:31:02,290 --> 01:31:03,640 Esto será importante dentro de un rato. 1825 01:31:03,640 --> 01:31:08,730 1826 01:31:08,730 --> 01:31:09,540 Aceptar. 1827 01:31:09,540 --> 01:31:12,750 Tan bien, ¿cómo se espera hasta el página completa se carga antes de 1828 01:31:12,750 --> 01:31:13,580 ejecutar algún código? 1829 01:31:13,580 --> 01:31:15,540 Vamos a entrar en esto un poco poco más tarde también. 1830 01:31:15,540 --> 01:31:19,016 Pero sólo mantener esta posición asuntos en mente para cuando 1831 01:31:19,016 --> 01:31:20,570 llegado a otra diapositiva. 1832 01:31:20,570 --> 01:31:22,030 >> Así llegamos a DOM ahora. 1833 01:31:22,030 --> 01:31:23,550 Y lo que es DOM? 1834 01:31:23,550 --> 01:31:26,830 Así que si nos fijamos en el código HTML, es sólo un montón de texto en la pantalla. 1835 01:31:26,830 --> 01:31:30,560 Entonces, ¿cómo sabe que JavaScript Este es un elemento HTML? 1836 01:31:30,560 --> 01:31:33,410 Así que tenemos que tener algo de memoria representación de este 1837 01:31:33,410 --> 01:31:34,930 estructura que tenemos. 1838 01:31:34,930 --> 01:31:40,240 Y cada vez que tenemos esto en memoria representación en JavaScript, que llamamos 1839 01:31:40,240 --> 01:31:41,750 que el DOM. 1840 01:31:41,750 --> 01:31:45,130 Y es sólo una manera de que la gente decidió que debemos representar esta 1841 01:31:45,130 --> 01:31:46,400 Estructura HTML como. 1842 01:31:46,400 --> 01:31:47,940 >> ¿Y qué tiene esto DOM parece? 1843 01:31:47,940 --> 01:31:50,460 Bueno, en representación de la memoria, tomamos este texto. 1844 01:31:50,460 --> 01:31:52,870 Y nos convertimos en la memoria representación. 1845 01:31:52,870 --> 01:31:54,400 Así que este es el HTML. 1846 01:31:54,400 --> 01:31:58,090 Así que nos encontramos en primer lugar que todos los Árbol DOM tiene un documento. 1847 01:31:58,090 --> 01:31:59,400 Se parece a un árbol. 1848 01:31:59,400 --> 01:32:03,550 Y el documento contiene el código HTML etiqueta, en realidad todo 1849 01:32:03,550 --> 01:32:05,150 dentro de esto ahora. 1850 01:32:05,150 --> 01:32:06,970 El tag HTML tiene dos hijos. 1851 01:32:06,970 --> 01:32:08,630 Tiene una cabeza. 1852 01:32:08,630 --> 01:32:12,380 Esa cabeza, si nos fijamos en la sangría allá en la forma en que está estructurado 1853 01:32:12,380 --> 01:32:14,960 entre las etiquetas de cierre, la cabeza tiene un hijo. 1854 01:32:14,960 --> 01:32:17,130 El niño es el título. 1855 01:32:17,130 --> 01:32:18,370 Exactamente. 1856 01:32:18,370 --> 01:32:21,000 >> Ahora, tenemos un niño cuerpo. 1857 01:32:21,000 --> 01:32:24,870 Y después de que el cuerpo tiene una niño llamó a la familia. 1858 01:32:24,870 --> 01:32:27,950 Y que la familia tiene tres hijos - 1859 01:32:27,950 --> 01:32:29,550 más antiguo, medio y menor. 1860 01:32:29,550 --> 01:32:31,960 Así que usted debe saber dibujar un diagrama así cuando nos preguntamos cómo 1861 01:32:31,960 --> 01:32:34,270 para dibujar un diagrama cuando damos que el código HTML de la izquierda. 1862 01:32:34,270 --> 01:32:36,350 Sepa cómo producir el árbol DOM. 1863 01:32:36,350 --> 01:32:38,930 Y dentro de estas cosas, sólo hay un poco de texto, que he representado 1864 01:32:38,930 --> 01:32:40,180 como pequeñas cajas. 1865 01:32:40,180 --> 01:32:42,750 1866 01:32:42,750 --> 01:32:47,980 >> ¿Esta estructura de árbol DOM hacer sentido y cuál es el DOM? 1867 01:32:47,980 --> 01:32:49,300 Entonces, ¿qué significan las siglas de la p ¿Que buscas? 1868 01:32:49,300 --> 01:32:51,850 Por aquí, la p por allá en esa etiqueta representa un 1869 01:32:51,850 --> 01:32:54,510 etiqueta de párrafo en HTML. 1870 01:32:54,510 --> 01:32:57,080 Así que usted puede mirar para arriba. 1871 01:32:57,080 --> 01:32:59,290 Pero sólo significa que es una espacio para el texto. 1872 01:32:59,290 --> 01:33:02,910 Y tiene un poco de CSS estilo predeterminado, porque es una etiqueta de párrafo. 1873 01:33:02,910 --> 01:33:05,130 Pero en realidad no te preocupes por que una parte demasiado. 1874 01:33:05,130 --> 01:33:07,510 Sólo sé que es un marcador de posición de algún texto. 1875 01:33:07,510 --> 01:33:08,480 Sí. 1876 01:33:08,480 --> 01:33:10,200 Consulta? 1877 01:33:10,200 --> 01:33:11,021 Sí. 1878 01:33:11,021 --> 01:33:12,374 >> AUDIENCIA: Usted acaba de mencionar CSS. 1879 01:33:12,374 --> 01:33:15,492 La familia de hash y el hash todo eso es, básicamente, 1880 01:33:15,492 --> 01:33:17,400 en representación de los ID en CSS? 1881 01:33:17,400 --> 01:33:18,440 >> JOSÉ ONG: Sí, exactamente. 1882 01:33:18,440 --> 01:33:20,380 Voy a llegar a lo que estos hashes significar en un segundo. 1883 01:33:20,380 --> 01:33:23,480 Cuando Angela se acercó CSS, ella hablado de selectores CSS. 1884 01:33:23,480 --> 01:33:26,770 Estos son los selectores CSS que que estaba hablando. 1885 01:33:26,770 --> 01:33:28,268 Sí, Rob? 1886 01:33:28,268 --> 01:33:32,060 >> ROB BOWDEN: También me gustaría comentar que DOM dentro de la etiqueta del título 1887 01:33:32,060 --> 01:33:35,385 es también un nodo de texto. 1888 01:33:35,385 --> 01:33:36,070 >> JOSÉ ONG: Así es. 1889 01:33:36,070 --> 01:33:38,370 Así que dentro de la etiqueta del título, Tengo un poco de DOM texto. 1890 01:33:38,370 --> 01:33:42,730 Así que en realidad, este título debe tener como una pequeña caja que sale de ella también. 1891 01:33:42,730 --> 01:33:45,740 Pero en realidad no importa demasiado en este caso. 1892 01:33:45,740 --> 01:33:49,620 En realidad no se preocupan por los nodos de texto, como los llamamos, demasiado. 1893 01:33:49,620 --> 01:33:50,270 Bueno, lo que hacemos. 1894 01:33:50,270 --> 01:33:51,520 Al parecer, lo que hacemos. 1895 01:33:51,520 --> 01:33:54,260 1896 01:33:54,260 --> 01:33:57,100 Y voy a arreglar eso cuando Subo de nuevo. 1897 01:33:57,100 --> 01:33:59,830 ¿Eso tiene sentido? 1898 01:33:59,830 --> 01:34:01,160 >> Entonces, ¿Cómo podemos trabajar con el DOM? 1899 01:34:01,160 --> 01:34:03,790 Cada vez que usted se ocupa de la DOM en JavaScript, hay dos pasos. 1900 01:34:03,790 --> 01:34:05,030 Usted selecciona un elemento DOM. 1901 01:34:05,030 --> 01:34:06,580 Y luego haces las cosas a ella. 1902 01:34:06,580 --> 01:34:11,480 Así que en este caso, de manera abstracta, no tengo seleccionado el elemento medio. 1903 01:34:11,480 --> 01:34:14,530 Y a continuación, un ejemplo de hacer las cosas a ella se cambia el texto. 1904 01:34:14,530 --> 01:34:16,020 Eso solía ser Bob. 1905 01:34:16,020 --> 01:34:19,930 Ahora bien, lo que hice con él fue que cambié Bob a Milo en este caso. 1906 01:34:19,930 --> 01:34:22,130 >> Así que ¿cómo podemos hacer esto? 1907 01:34:22,130 --> 01:34:23,440 ¿Cómo hacemos la selección? 1908 01:34:23,440 --> 01:34:26,560 ¿Y cómo hacemos el haciendo cosas para la cosa una vez que hemos tomado esto? 1909 01:34:26,560 --> 01:34:30,470 Bueno, la forma en que ustedes han aprendido en esta clase es el uso de algo que 1910 01:34:30,470 --> 01:34:32,420 llamada jQuery. 1911 01:34:32,420 --> 01:34:33,910 Entonces, ¿qué es jQuery? 1912 01:34:33,910 --> 01:34:37,220 jQuery es una biblioteca que hace JavaScript más fácil de escribir. 1913 01:34:37,220 --> 01:34:39,500 Así que alguien se tomó el tiempo y escribió jQuery. 1914 01:34:39,500 --> 01:34:41,530 >> jQuery es en realidad escrito en JavaScript. 1915 01:34:41,530 --> 01:34:44,550 Y luego porque hicieron esto, ahora tiene un montón de funciones que 1916 01:34:44,550 --> 01:34:46,020 podemos usar que hacen que nuestra vive realmente fácil. 1917 01:34:46,020 --> 01:34:48,580 1918 01:34:48,580 --> 01:34:50,030 ¿Cuáles son algunas de las cosas que hace? 1919 01:34:50,030 --> 01:34:51,650 Esto hace que la selección elementos más fácil. 1920 01:34:51,650 --> 01:34:54,020 Se hace el cambio de HTML, la adición de las clases más fácil. 1921 01:34:54,020 --> 01:34:55,360 Se hace más fácil el Ajax. 1922 01:34:55,360 --> 01:34:58,230 Vamos a llegar a eso en un segundo. 1923 01:34:58,230 --> 01:35:00,630 >> Y es análoga a bibliotecas C. 1924 01:35:00,630 --> 01:35:03,090 Así que usted incluye string.h, te strlen. 1925 01:35:03,090 --> 01:35:04,680 Usted consigue strcpy, todas estas cosas. 1926 01:35:04,680 --> 01:35:09,650 Al incluir jQuery, se obtiene buena formas de seleccionar elementos al cambio 1927 01:35:09,650 --> 01:35:10,390 cosas, etcétera. 1928 01:35:10,390 --> 01:35:12,990 Usted consigue una funcionalidad extra que JavaScript no le da. 1929 01:35:12,990 --> 01:35:15,310 Así que jQuery no está JavaScript. 1930 01:35:15,310 --> 01:35:18,660 jQuery es una biblioteca que está escrito en JavaScript que hace JavaScript 1931 01:35:18,660 --> 01:35:20,440 más fácil de escribir. 1932 01:35:20,440 --> 01:35:23,170 >> Así que jQuery no es una programación idioma. 1933 01:35:23,170 --> 01:35:24,540 Pero es JavaScript. 1934 01:35:24,540 --> 01:35:27,420 1935 01:35:27,420 --> 01:35:27,590 hacer. 1936 01:35:27,590 --> 01:35:30,420 Asegurarse de que recibe su terminología correcta. 1937 01:35:30,420 --> 01:35:32,490 ¿Alguna pregunta? 1938 01:35:32,490 --> 01:35:33,882 Sí. 1939 01:35:33,882 --> 01:35:35,132 ¿Es una pregunta? 1940 01:35:35,132 --> 01:35:37,910 1941 01:35:37,910 --> 01:35:38,350 Está bien. 1942 01:35:38,350 --> 01:35:40,080 Así que, ¿cómo usar jQuery? 1943 01:35:40,080 --> 01:35:42,390 Bueno, cuando estás escribiendo algunos El código JavaScript y se incluye un 1944 01:35:42,390 --> 01:35:45,570 jQuery en la parte superior de su archivo como un archivo de script, se utiliza el signo de dólar 1945 01:35:45,570 --> 01:35:47,310 ahora para obtener acceso a jQuery para. 1946 01:35:47,310 --> 01:35:49,860 Y esto es diferente de el signo de dólar en PHP. 1947 01:35:49,860 --> 01:35:51,590 >> Es el mismo símbolo que escriba en el teclado. 1948 01:35:51,590 --> 01:35:52,780 Pero que significan cosas muy diferentes. 1949 01:35:52,780 --> 01:35:56,090 Signo de dólar en PHP significa esto es como me declaro una variable. 1950 01:35:56,090 --> 01:35:59,120 En JavaScript, cuando usted ha incluido jQuery, que representa jQuery. 1951 01:35:59,120 --> 01:36:01,280 Así que tenlo en cuenta. 1952 01:36:01,280 --> 01:36:03,420 Así que ¿cómo podemos seleccionar los elementos DOM? 1953 01:36:03,420 --> 01:36:06,500 Bueno, cuando lo hace el feo JavaScript manera, se accede a la 1954 01:36:06,500 --> 01:36:08,240 documentar variable global. 1955 01:36:08,240 --> 01:36:11,170 Y entonces usted consigue elemento de la familia de identificación. 1956 01:36:11,170 --> 01:36:15,270 Esto es muy largo y prolijo y no muy agradable. 1957 01:36:15,270 --> 01:36:18,190 >> O usted puede conseguir todos los elementos que son una etiqueta p. 1958 01:36:18,190 --> 01:36:20,080 Eso también funciona en JavaScript. 1959 01:36:20,080 --> 01:36:22,470 Pero en realidad nunca mostró que la sintaxis demasiado. 1960 01:36:22,470 --> 01:36:24,620 Lo que demostramos que eras jQuery. 1961 01:36:24,620 --> 01:36:28,720 Así que todo ese selector hacia arriba hay que se expresó en JavaScript sólo se pone 1962 01:36:28,720 --> 01:36:33,320 condensado a esta muy bonito dólar firmar familia hashtag. 1963 01:36:33,320 --> 01:36:38,480 Y $ p, justo donde es así. 1964 01:36:38,480 --> 01:36:41,690 Si desea seleccionar todas las etiquetas p dentro de una familia, ponemos un espacio 1965 01:36:41,690 --> 01:36:42,890 entre los dos. 1966 01:36:42,890 --> 01:36:44,815 Y ahora, tenemos todo el p etiquetas dentro de una familia. 1967 01:36:44,815 --> 01:36:48,740 1968 01:36:48,740 --> 01:36:50,380 >> Y mira familiar? 1969 01:36:50,380 --> 01:36:52,880 Bueno, Angela habló de Selectores CSS. 1970 01:36:52,880 --> 01:36:54,200 Dame un segundo. 1971 01:36:54,200 --> 01:36:57,230 Y así, con el fin de seleccionar un elemento, sólo tiene que utilizar el mismo que usted 1972 01:36:57,230 --> 01:36:58,530 lo haría con un selector CSS. 1973 01:36:58,530 --> 01:37:00,910 Si pones un hash delante de ello, se selecciona por ID. 1974 01:37:00,910 --> 01:37:02,220 Un punto selecciona por clases. 1975 01:37:02,220 --> 01:37:06,230 Si sólo tienes la cosa sin hashes o puntos, selecciona esas etiquetas. 1976 01:37:06,230 --> 01:37:07,140 Preguntas. 1977 01:37:07,140 --> 01:37:07,470 ¿Sí? 1978 01:37:07,470 --> 01:37:11,510 >> AUDIENCIA: Cuando usamos punto en nuestra HTML, es que no jQuery? 1979 01:37:11,510 --> 01:37:13,520 >> JOSÉ ONG: Dot en nuestro HTML es una cosa JavaScript. 1980 01:37:13,520 --> 01:37:14,750 No es una cosa de jQuery. 1981 01:37:14,750 --> 01:37:17,620 La forma en que ustedes lo aprendieron con jQuery es utilizar. HTML. 1982 01:37:17,620 --> 01:37:21,510 Y luego pasó lo que sea el código HTML que va a ser. 1983 01:37:21,510 --> 01:37:23,480 Así que voy a llegar a eso en un solo una segunda realidad. 1984 01:37:23,480 --> 01:37:27,800 Entonces, ¿cómo hacemos las cosas a elemento una vez que hemos seleccionado es? 1985 01:37:27,800 --> 01:37:30,130 Así que eso es un ejemplo de la selección de un elemento. 1986 01:37:30,130 --> 01:37:32,280 Así que ahora, lo que queremos hacer cosas para ella. 1987 01:37:32,280 --> 01:37:35,730 >> Así que en este caso, déjame volver a la diapositiva anterior. 1988 01:37:35,730 --> 01:37:37,360 Fue Bob antes. 1989 01:37:37,360 --> 01:37:40,660 Y yo quiero cambiar eso dentro de HTML a Milo. 1990 01:37:40,660 --> 01:37:43,240 Así que llamo a la función HTML desde el elemento. 1991 01:37:43,240 --> 01:37:45,580 Esa función HTML está un método de elemento. 1992 01:37:45,580 --> 01:37:47,430 Y entonces me doy lo que Quiero que el HTML sea. 1993 01:37:47,430 --> 01:37:50,560 Y simplemente reemplaza lo que hay dentro de esa etiqueta con lo que le doy. 1994 01:37:50,560 --> 01:37:50,830 Sí. 1995 01:37:50,830 --> 01:37:51,170 Consulta? 1996 01:37:51,170 --> 01:37:57,397 >> AUDIENCIA: Se utiliza el hashtag sólo para el jQuery. 1997 01:37:57,397 --> 01:37:59,313 [Inaudible] 1998 01:37:59,313 --> 01:38:01,230 no usaríamos eso. 1999 01:38:01,230 --> 01:38:01,960 >> JOSÉ ONG: Sí, exactamente. 2000 01:38:01,960 --> 01:38:03,750 Pero no te preocupes demasiado JavaScript sobre pura. 2001 01:38:03,750 --> 01:38:06,670 Sólo quiero que ustedes se centre en cómo lo haría con jQuery, porque 2002 01:38:06,670 --> 01:38:10,020 eso va a ser la importante parte en el concurso. 2003 01:38:10,020 --> 01:38:10,400 Derecha. 2004 01:38:10,400 --> 01:38:10,880 Exactamente. 2005 01:38:10,880 --> 01:38:16,025 Así que ya ves que hashtag, de modo que corresponde para seleccionar el elemento con 2006 01:38:16,025 --> 01:38:18,310 el medio ID por eso hashtag. 2007 01:38:18,310 --> 01:38:19,670 Hashtag significa ID. 2008 01:38:19,670 --> 01:38:22,870 Y este elemento tiene un ID de centro. 2009 01:38:22,870 --> 01:38:24,366 Así que ese es el elemento que seleccionamos. 2010 01:38:24,366 --> 01:38:27,160 >> AUDIENCIA: [inaudible]. 2011 01:38:27,160 --> 01:38:31,090 signo de dólar hashtag [inaudible]? 2012 01:38:31,090 --> 01:38:31,710 >> JOSÉ ONG: Así no. 2013 01:38:31,710 --> 01:38:33,280 La pregunta es ¿Se puede utilizar. Valor. 2014 01:38:33,280 --> 01:38:36,445 Y. Valor sólo funciona en los elementos que son insumos. 2015 01:38:36,445 --> 01:38:40,950 2016 01:38:40,950 --> 01:38:45,495 En jQuery, sería . Val, no. Valor. 2017 01:38:45,495 --> 01:38:49,080 Así que voy a llegar a un pequeño ejemplo que demuestra todo esto en combinación 2018 01:38:49,080 --> 01:38:49,850 en un segundo. 2019 01:38:49,850 --> 01:38:53,130 Pero creo que esto sirve un pequeño fragmento tiene sentido que la gente hasta ahora. 2020 01:38:53,130 --> 01:38:55,450 ¿Quieres cambiar el código HTML, llamar al método de HTML. 2021 01:38:55,450 --> 01:38:56,432 Sí. 2022 01:38:56,432 --> 01:38:58,200 >> AUDIENCIA: ¿Puede explicar el método de nuevo? 2023 01:38:58,200 --> 01:39:01,900 >> JOSÉ ONG: Así que un método es sólo una función que pertenece a uno, en este 2024 01:39:01,900 --> 01:39:04,590 caso, uno de estos elementos DOM, porque se ve que 2025 01:39:04,590 --> 01:39:05,940 seleccionado el elemento primero. 2026 01:39:05,940 --> 01:39:07,320 En realidad, me permitió usar el ratón. 2027 01:39:07,320 --> 01:39:09,330 He seleccionado el primer elemento. 2028 01:39:09,330 --> 01:39:12,310 Y entonces llamé a este HTML función que tenía. 2029 01:39:12,310 --> 01:39:15,710 Y debido a esta función pertenece a esto, lo llamamos un método. 2030 01:39:15,710 --> 01:39:19,480 Eso es sólo un nombre elegante para ella. 2031 01:39:19,480 --> 01:39:20,730 Dilo de nuevo. 2032 01:39:20,730 --> 01:39:22,880 2033 01:39:22,880 --> 01:39:25,170 Así que recuerde, se seleccionaron el elemento ahora. 2034 01:39:25,170 --> 01:39:27,810 Y hemos puesto en el interior de la variable elemento. 2035 01:39:27,810 --> 01:39:28,600 Corrija? 2036 01:39:28,600 --> 01:39:34,380 >> Por eso, cuando queremos cambiar el código HTML en en el interior, porque era Bob antes, 2037 01:39:34,380 --> 01:39:36,420 quiere cambiar ese texto a Milo. 2038 01:39:36,420 --> 01:39:37,920 Así que llamamos HTML. 2039 01:39:37,920 --> 01:39:41,610 Y nosotros decimos que lo que el HTML dentro ese elemento debe ser ahora. 2040 01:39:41,610 --> 01:39:44,107 Y así se lo cambia por Milo, porque yo se lo di Milo. 2041 01:39:44,107 --> 01:39:46,542 >> AUDIENCIA: Así que están trabajando juntos. 2042 01:39:46,542 --> 01:39:47,030 [Inaudible] 2043 01:39:47,030 --> 01:39:47,390 >> JOSÉ ONG: Sí, sí. 2044 01:39:47,390 --> 01:39:48,180 Están trabajando juntos. 2045 01:39:48,180 --> 01:39:50,210 Así que uno de ellos selecciona el elemento primero. 2046 01:39:50,210 --> 01:39:52,863 Y el segundo lo hace algo a él. 2047 01:39:52,863 --> 01:39:53,790 Sí. 2048 01:39:53,790 --> 01:39:56,168 >> AUDIENCIA: [inaudible]. 2049 01:39:56,168 --> 01:40:01,280 Si este método es diferente de en HTML usted tiene el método de la igualdad real. 2050 01:40:01,280 --> 01:40:01,560 >> JOSÉ ONG: Si. 2051 01:40:01,560 --> 01:40:03,370 Es un método diferente. 2052 01:40:03,370 --> 01:40:04,670 Es un método diferente. 2053 01:40:04,670 --> 01:40:07,860 Y podemos cubrir que en tan sólo un segundo cuando lleguemos a un ejemplo. 2054 01:40:07,860 --> 01:40:12,000 Quiero para asegurarse de que aceleremos porque nos estamos quedando sin tiempo. 2055 01:40:12,000 --> 01:40:15,360 Pero nos hemos quedado muy por encima hora actual. 2056 01:40:15,360 --> 01:40:15,490 Aceptar. 2057 01:40:15,490 --> 01:40:16,430 Genial. 2058 01:40:16,430 --> 01:40:20,130 Así que si usted quiere agregar una clase, hay también un método de clase add. 2059 01:40:20,130 --> 01:40:24,300 Esto es sólo un ejemplo de lo que puede hacer con jQuery. 2060 01:40:24,300 --> 01:40:25,950 Eso sólo se suma una clase. 2061 01:40:25,950 --> 01:40:28,660 >> Si desea eliminarlo, usted puede llamar a remove. 2062 01:40:28,660 --> 01:40:32,280 Esa es otra de las cosas que puede hacer. 2063 01:40:32,280 --> 01:40:35,680 Así más ejemplos de cosas que puedes hacer. 2064 01:40:35,680 --> 01:40:37,510 Así que ¿puedo ponerlo en la parte superior de esta manera? 2065 01:40:37,510 --> 01:40:38,760 Benjamín remove. 2066 01:40:38,760 --> 01:40:42,470 2067 01:40:42,470 --> 01:40:45,930 Si sólo hay que ejecutar JavaScript en la parte superior de mi archivo, funciona eso? 2068 01:40:45,930 --> 01:40:48,540 2069 01:40:48,540 --> 01:40:48,920 Derecha. 2070 01:40:48,920 --> 01:40:50,530 Debido media no existe todavía. 2071 01:40:50,530 --> 01:40:51,840 Así que esto no va a funcionar. 2072 01:40:51,840 --> 01:40:52,800 Orden de ejecución. 2073 01:40:52,800 --> 01:40:55,040 Se va a la parte superior primero. 2074 01:40:55,040 --> 01:40:55,540 ¿Qué? 2075 01:40:55,540 --> 01:40:57,450 >> AUDIENCIA: Menores no existe todavía? 2076 01:40:57,450 --> 01:40:57,810 >> JOSÉ ONG: Si. 2077 01:40:57,810 --> 01:40:58,710 Benjamín no existe todavía. 2078 01:40:58,710 --> 01:40:59,600 Exactamente. 2079 01:40:59,600 --> 01:41:01,320 >> AUDIENCIA: Usted ha dicho medio. 2080 01:41:01,320 --> 01:41:01,510 >> JOSÉ ONG: Lo siento. 2081 01:41:01,510 --> 01:41:02,720 Benjamín no existe todavía. 2082 01:41:02,720 --> 01:41:04,510 Y la otra cosa es que no tengo incluido jQuery 2083 01:41:04,510 --> 01:41:06,580 presentar pedir script src. 2084 01:41:06,580 --> 01:41:07,960 Así que eso no va a funcionar. 2085 01:41:07,960 --> 01:41:09,580 En realidad, yo no hice eso en la siguiente diapositiva, que es 2086 01:41:09,580 --> 01:41:10,700 supuestamente para arreglar eso. 2087 01:41:10,700 --> 01:41:14,120 Pero la forma en que lo hacemos es JavaScript es impulsado evento. 2088 01:41:14,120 --> 01:41:17,410 Así que lo que hacemos es que usamos un evento Handler para que esto suceda. 2089 01:41:17,410 --> 01:41:19,510 Y, entonces, seleccione el documento establecer primero. 2090 01:41:19,510 --> 01:41:23,810 Digo, está bien, cuando el documento es listo, yo correré una función. 2091 01:41:23,810 --> 01:41:25,470 Así que eso es todo lo que los medios de sintaxis. 2092 01:41:25,470 --> 01:41:27,100 >> He escogido el documento. 2093 01:41:27,100 --> 01:41:29,530 Ahora, cuando el documento es listo, ejecute la función. 2094 01:41:29,530 --> 01:41:32,970 Y así por aquí cuando el documento es listo, lo que significa que todo el HTML tiene 2095 01:41:32,970 --> 01:41:36,140 cargado, entonces corro a la función que elimina ese elemento. 2096 01:41:36,140 --> 01:41:40,270 Y ahora, cuando ejecuto esta función que pasé en listo, estoy 2097 01:41:40,270 --> 01:41:43,780 garantizado que todo el HTML en el página va a existir en primer lugar. 2098 01:41:43,780 --> 01:41:44,100 Sí. 2099 01:41:44,100 --> 01:41:44,425 Consulta? 2100 01:41:44,425 --> 01:41:48,200 >> AUDIENCIA: ¿Cuál es la palabra clave event dentro de la función? 2101 01:41:48,200 --> 01:41:51,750 >> JOSÉ ONG: ¿Así que la palabra clave en el caso función es sólo un parámetro que 2102 01:41:51,750 --> 01:41:53,490 se pasa a la función para cualquier evento. 2103 01:41:53,490 --> 01:41:55,470 Es sólo algo que se obtiene de forma gratuita. 2104 01:41:55,470 --> 01:41:59,320 Cuando usted está utilizando los controladores clave en pset8, ese evento podría decir, por 2105 01:41:59,320 --> 01:42:01,350 ejemplo, qué tecla ha pulsado sobre. 2106 01:42:01,350 --> 01:42:05,540 En este caso, para un evento de listo, en realidad no es muy útil. 2107 01:42:05,540 --> 01:42:08,640 Pero para un evento de la tecla, es más útil, porque se llega a saber que 2108 01:42:08,640 --> 01:42:12,330 tecla pulsada por la clave para acceder a código de ese objeto de evento. 2109 01:42:12,330 --> 01:42:13,530 Corrija? 2110 01:42:13,530 --> 01:42:15,160 ¿Eso tiene sentido? 2111 01:42:15,160 --> 01:42:16,280 Aceptar. 2112 01:42:16,280 --> 01:42:16,580 Sí. 2113 01:42:16,580 --> 01:42:17,150 Consulta? 2114 01:42:17,150 --> 01:42:19,290 >> AUDIENCIA: ¿Así que puedes poner el etiqueta de script más abajo? 2115 01:42:19,290 --> 01:42:19,940 >> JOSÉ ONG: Así que sí. 2116 01:42:19,940 --> 01:42:21,500 Usted podría poner el guión etiquetar más abajo. 2117 01:42:21,500 --> 01:42:23,090 Pero entonces, sólo se vuelve realmente complicado. 2118 01:42:23,090 --> 01:42:26,590 Y nos gusta centralizar toda de nuestro código en un lugar. 2119 01:42:26,590 --> 01:42:28,290 Y esto nos permitirá hacerlo. 2120 01:42:28,290 --> 01:42:32,010 Recuerde que antes he dicho que hay una mejor manera de asegurar que los elementos están 2121 01:42:32,010 --> 01:42:33,880 en la página antes de ejecutar el código? 2122 01:42:33,880 --> 01:42:36,079 Y esto es sólo una manera agradable usted desea lograr eso. 2123 01:42:36,079 --> 01:42:37,329 >> AUDIENCIA: [inaudible]. 2124 01:42:37,329 --> 01:42:41,710 2125 01:42:41,710 --> 01:42:42,230 >> JOSÉ ONG: Si. 2126 01:42:42,230 --> 01:42:43,460 Usted todavía tiene que hacerlo, ¿no? 2127 01:42:43,460 --> 01:42:46,930 Porque recuerda, que incluyó la presentar en la parte superior de la página. 2128 01:42:46,930 --> 01:42:49,890 Así que va a ejecutar en primer lugar antes de se llega a la parte inferior de la página. 2129 01:42:49,890 --> 01:42:54,600 2130 01:42:54,600 --> 01:42:55,180 Aceptar. 2131 01:42:55,180 --> 01:42:59,210 Así que usted puede también agregar a otra persona tipo de controlador de eventos. 2132 01:42:59,210 --> 01:43:00,640 Éste sólo procesa los clics. 2133 01:43:00,640 --> 01:43:03,910 Cuando hago clic en joven, luego que se abrirá con una alerta. 2134 01:43:03,910 --> 01:43:05,440 Esto es sólo una diferente tipo de evento. 2135 01:43:05,440 --> 01:43:08,840 A diferencia del evento ready, ahora utilizar el evento click cuando reciba 2136 01:43:08,840 --> 01:43:10,190 hace clic en un elemento. 2137 01:43:10,190 --> 01:43:13,860 >> Y así, en este caso, recuerde, el clic controlador está conectado a menor. 2138 01:43:13,860 --> 01:43:16,080 Por lo que sólo ocurre cuando Hago clic en los más jóvenes. 2139 01:43:16,080 --> 01:43:19,510 Y en el otro, el evento ready se adjunta al documento. 2140 01:43:19,510 --> 01:43:23,750 Por lo tanto, espera a que el documento para estar listo. 2141 01:43:23,750 --> 01:43:25,120 Tiene sentido? 2142 01:43:25,120 --> 01:43:26,190 Creo que puedo seguir adelante. 2143 01:43:26,190 --> 01:43:26,610 Sí. 2144 01:43:26,610 --> 01:43:26,980 Consulta? 2145 01:43:26,980 --> 01:43:28,230 >> AUDIENCIA: [inaudible]. 2146 01:43:28,230 --> 01:43:31,676 2147 01:43:31,676 --> 01:43:33,620 en este caso se utiliza [inaudible]. 2148 01:43:33,620 --> 01:43:36,650 >> JOSÉ ONG: Oh, sí, porque en este caso, tengo que esperar a que los más jóvenes 2149 01:43:36,650 --> 01:43:40,740 elemento para que aparezca en la pantalla primero antes de que pueda conectar un controlador de clic a 2150 01:43:40,740 --> 01:43:43,062 que, por lo que me puse dentro de un documento listo. 2151 01:43:43,062 --> 01:43:45,780 2152 01:43:45,780 --> 01:43:46,840 Aceptar. 2153 01:43:46,840 --> 01:43:52,390 Y al lado, así que esto es un gran ejemplo de cómo le gustaría combinar todo. 2154 01:43:52,390 --> 01:43:55,930 Esto es sólo un ejemplo de validación de formularios que has visto en clase. 2155 01:43:55,930 --> 01:43:58,410 Así que ir paso a paso a medida usted va a través de este. 2156 01:43:58,410 --> 01:43:59,590 Y será totalmente bien. 2157 01:43:59,590 --> 01:44:01,400 Acabo de leer lo de arriba a abajo. 2158 01:44:01,400 --> 01:44:03,030 >> Tengo un formulario en la parte inferior. 2159 01:44:03,030 --> 01:44:07,590 Cuando el documento esté listo, adjunto un presentar manejador a la forma, de tal manera que 2160 01:44:07,590 --> 01:44:12,910 cuando presente el formulario, consigo los valores dentro de cada una de esas entradas. 2161 01:44:12,910 --> 01:44:14,560 Y puedo comprobar si está en blanco. 2162 01:44:14,560 --> 01:44:17,090 Si está en blanco, vuelvo falsa, porque No quiero para enviar el formulario, 2163 01:44:17,090 --> 01:44:18,950 porque la forma es erróneo. 2164 01:44:18,950 --> 01:44:22,040 Si la contraseña está en blanco o es menos de ocho caracteres, no me someto 2165 01:44:22,040 --> 01:44:24,470 la forma, porque eso también es malo. 2166 01:44:24,470 --> 01:44:28,150 Y el falso retorno sólo previene la forma de presentación y 2167 01:44:28,150 --> 01:44:30,150 ir a una nueva página. 2168 01:44:30,150 --> 01:44:31,310 >> Y es de esperar, esto tiene sentido. 2169 01:44:31,310 --> 01:44:34,650 Creo que ustedes deben caminar a través de este código paso a paso por su cuenta. 2170 01:44:34,650 --> 01:44:38,350 Y una vez que usted entiende lo que el selectivo elementos y hacer cosas a ella 2171 01:44:38,350 --> 01:44:40,520 en realidad implica, esto hará que mucho sentido para usted. 2172 01:44:40,520 --> 01:44:41,295 ¿Sí? 2173 01:44:41,295 --> 01:44:44,150 >> AUDIENCIA: ¿Qué hace el name = significa nombre de usuario? 2174 01:44:44,150 --> 01:44:48,530 >> JOSÉ ONG: Así que el nombre = nombre de usuario y name = contraseña sólo significa mira el 2175 01:44:48,530 --> 01:44:50,730 atributo de lo usted está seleccionando. 2176 01:44:50,730 --> 01:44:51,790 Y entonces eso tiene que coincidir. 2177 01:44:51,790 --> 01:44:53,870 Así que entramos en el registro. 2178 01:44:53,870 --> 01:44:56,240 Y luego nos fijamos en todas las entradas y el registro. 2179 01:44:56,240 --> 01:44:59,990 Y luego escogemos el que el nombre atributo es igual al nombre de usuario. 2180 01:44:59,990 --> 01:45:04,040 Así que el primer selector sólo selecciona la entrada de nombre de usuario. 2181 01:45:04,040 --> 01:45:08,220 Y ese segundo selector sólo selecciona la contraseña de uno, porque éstos tienen 2182 01:45:08,220 --> 01:45:12,240 sus atributos name establecen como lo se supone que deben ser. 2183 01:45:12,240 --> 01:45:12,575 Consulta? 2184 01:45:12,575 --> 01:45:17,030 >> AUDIENCIA: En la presentación, ¿cómo funciona el parte inferior a resolver la parte de arriba? 2185 01:45:17,030 --> 01:45:19,350 >> JOSÉ ONG: Así que eso es porque del controlador de eventos. 2186 01:45:19,350 --> 01:45:23,000 Así que estamos a la espera de un evento de presentar que es despedido de la forma. 2187 01:45:23,000 --> 01:45:24,730 Y eso es todo lo que es presente. 2188 01:45:24,730 --> 01:45:26,080 ¿Por qué llamo presentar hasta allí? 2189 01:45:26,080 --> 01:45:28,870 Dice, cuando se envía el formulario, Me sale un evento presentará. 2190 01:45:28,870 --> 01:45:33,480 Así que permítanme que interceptar y a continuación, ejecute este código en su lugar. 2191 01:45:33,480 --> 01:45:33,823 ¿Sí? 2192 01:45:33,823 --> 01:45:35,866 >> AUDIENCIA: ¿Por qué tienes tener evento función? 2193 01:45:35,866 --> 01:45:38,580 ¿Por qué no puede usted acaba de [inaudible]? 2194 01:45:38,580 --> 01:45:41,140 >> JOSÉ ONG: Porque en JavaScript, tienen que declarar las funciones. 2195 01:45:41,140 --> 01:45:42,910 Así es como funciona en JavaScript. 2196 01:45:42,910 --> 01:45:44,800 Usted tiene que decir que va para ejecutar una función. 2197 01:45:44,800 --> 01:45:47,290 Así que usted está diciendo es que eres esperando una función aquí en lugar de 2198 01:45:47,290 --> 01:45:48,260 sólo llaves. 2199 01:45:48,260 --> 01:45:50,460 >> AUDIENCIA: Y la función es lo que sigue? 2200 01:45:50,460 --> 01:45:50,650 >> JOSÉ ONG: Si. 2201 01:45:50,650 --> 01:45:52,790 La función es lo que está en el interior las llaves después de 2202 01:45:52,790 --> 01:45:53,630 esa palabra clave función. 2203 01:45:53,630 --> 01:45:54,045 ¿Sí? 2204 01:45:54,045 --> 01:45:55,295 >> AUDIENCIA: [inaudible]. 2205 01:45:55,295 --> 01:46:00,180 2206 01:46:00,180 --> 01:46:00,660 >> JOSÉ ONG: Para presentar? 2207 01:46:00,660 --> 01:46:03,520 >> AUDIENCIA: No, para la función sin el evento. 2208 01:46:03,520 --> 01:46:03,770 >> JOSÉ ONG: Si. 2209 01:46:03,770 --> 01:46:05,610 Así que sin el evento, usted puede tener eso. 2210 01:46:05,610 --> 01:46:08,480 Si usted no necesita el evento, a continuación, puedes omitirlo. 2211 01:46:08,480 --> 01:46:12,220 Pero si lo hace, entonces usted sólo hay que poner ahí. 2212 01:46:12,220 --> 01:46:12,520 Sí. 2213 01:46:12,520 --> 01:46:13,190 Una pregunta rápida? 2214 01:46:13,190 --> 01:46:14,440 >> AUDIENCIA: [inaudible]. 2215 01:46:14,440 --> 01:46:21,170 2216 01:46:21,170 --> 01:46:21,440 >> JOSÉ ONG: Si. 2217 01:46:21,440 --> 01:46:24,550 Porque lo que tiene que hacer, el document.ready sólo dice esperar a que todos los 2218 01:46:24,550 --> 01:46:26,540 el código HTML de la página se cargue primero. 2219 01:46:26,540 --> 01:46:30,510 Y por lo general, usted quiere que sus elementos en su lugar antes de ejecutar cualquier código. 2220 01:46:30,510 --> 01:46:31,030 Está bien. 2221 01:46:31,030 --> 01:46:32,180 Tenemos que llegar al Ajax. 2222 01:46:32,180 --> 01:46:33,110 No tenemos mucho tiempo. 2223 01:46:33,110 --> 01:46:35,170 Así pros y sus contras. 2224 01:46:35,170 --> 01:46:37,450 JavaScript es más fácil tratar escribir con jQuery. 2225 01:46:37,450 --> 01:46:38,930 Pero jQuery es un poco lento. 2226 01:46:38,930 --> 01:46:42,290 >> Es como PHP es más lento que C, porque ha interpretado. 2227 01:46:42,290 --> 01:46:45,690 Y jQuery es un poco más lento que JavaScript, ya que hace un montón de 2228 01:46:45,690 --> 01:46:46,630 las cosas bajo el capó. 2229 01:46:46,630 --> 01:46:48,660 Y por lo que si usted está usando jQuery, es sólo un poco más lento que 2230 01:46:48,660 --> 01:46:51,630 JavaScript, aunque le da buen elegancia. 2231 01:46:51,630 --> 01:46:53,970 Y, por último, el Ajax. 2232 01:46:53,970 --> 01:46:59,170 Hasta ahora con el Ajax, que no has visto Ajax en términos de pset7 todavía, porque 2233 01:46:59,170 --> 01:47:01,150 cuando lo hace, usted somete una forma de cotización. 2234 01:47:01,150 --> 01:47:02,350 Se carga una nueva página. 2235 01:47:02,350 --> 01:47:04,440 Para que pueda obtener este gran destello blanco en la página, mientras que 2236 01:47:04,440 --> 01:47:06,820 cargas segunda página, ¿correcto? 2237 01:47:06,820 --> 01:47:08,780 >> Sería muy bueno si usted no tener este flash. 2238 01:47:08,780 --> 01:47:11,600 Al igual que Facebook, si usted acaba de desplazarse a la parte inferior, se añade nuevo contenido 2239 01:47:11,600 --> 01:47:13,490 sin actualizar la página entera. 2240 01:47:13,490 --> 01:47:15,420 Así que algo así iba a ser agradable. 2241 01:47:15,420 --> 01:47:17,370 Este es el código JavaScript en el lado izquierdo. 2242 01:47:17,370 --> 01:47:19,390 Usted obtiene lo que hay dentro de esa entrada. 2243 01:47:19,390 --> 01:47:21,340 Usted recibe la información de stock de Yahoo! 2244 01:47:21,340 --> 01:47:27,440 Y luego de hacer una gran cadena que dice, OK, este es el mensaje que quiero 2245 01:47:27,440 --> 01:47:28,400 para mostrar en la pantalla. 2246 01:47:28,400 --> 01:47:32,280 Y luego pones ese mensaje dentro de algún elemento HTML que se 2247 01:47:32,280 --> 01:47:33,970 que aparece en la pantalla. 2248 01:47:33,970 --> 01:47:35,540 >> Así que eso es todo lo que está pasando aquí. 2249 01:47:35,540 --> 01:47:39,410 Así que, básicamente, porque todo esto es JavaScript y no es necesario para ejecutar 2250 01:47:39,410 --> 01:47:42,980 Ya PHP, este se asegurará de que la página no se actualiza. 2251 01:47:42,980 --> 01:47:47,470 Así que esto es sólo una idea abstracta que yo estoy diciendo aquí por ahora. 2252 01:47:47,470 --> 01:47:50,630 La idea abstracta es que si lo haces todo en JavaScript, que no tienen un 2253 01:47:50,630 --> 01:47:52,330 actualización de la página. 2254 01:47:52,330 --> 01:47:53,800 Pero, ¿cómo realmente hacer esto? 2255 01:47:53,800 --> 01:47:56,230 >> Bueno, en realidad, vamos a hablar de un problema con este primero. 2256 01:47:56,230 --> 01:47:59,340 Un problema es en JavaScript, ejecución es sincrónica. 2257 01:47:59,340 --> 01:48:02,000 Así que hay que esperar a que una line para terminar antes de que usted 2258 01:48:02,000 --> 01:48:03,370 ejecutará la siguiente línea. 2259 01:48:03,370 --> 01:48:06,130 ¿Y si me voy a Yahoo!, y sus servidores son muy lentos, y 2260 01:48:06,130 --> 01:48:08,790 les toma tres segundos para devuélveme ese stock info? 2261 01:48:08,790 --> 01:48:12,620 Cuando llegué a esa línea de precios, si el ejecución es sincrónica, ya que es por 2262 01:48:12,620 --> 01:48:15,390 De forma predeterminada, lo que sólo va a hacer es el navegador va a estancar por 2263 01:48:15,390 --> 01:48:15,930 tres segundos. 2264 01:48:15,930 --> 01:48:18,900 Y tú no vas a ser capaz de hacer nada mientras se pone esos datos. 2265 01:48:18,900 --> 01:48:20,010 Va a ser congelados. 2266 01:48:20,010 --> 01:48:20,800 >> Y eso es malo. 2267 01:48:20,800 --> 01:48:23,390 Usted no desea que un usuario tendrá una página Web congelado. 2268 01:48:23,390 --> 01:48:24,170 Corrija? 2269 01:48:24,170 --> 01:48:25,480 Eso es malo. 2270 01:48:25,480 --> 01:48:26,770 Todos están de acuerdo? 2271 01:48:26,770 --> 01:48:29,270 Si estás navegando por Facebook y se se congela y no se puede hacer nada, 2272 01:48:29,270 --> 01:48:31,920 conseguir realmente frustrado. 2273 01:48:31,920 --> 01:48:34,960 Así que la solución es que hagamos algo asíncrono lugar. 2274 01:48:34,960 --> 01:48:38,910 Así que todo esto asíncrono dice es, yo voy a hacer esta 2275 01:48:38,910 --> 01:48:40,280 URL para algunos datos. 2276 01:48:40,280 --> 01:48:41,610 Y luego voy a seguir adelante. 2277 01:48:41,610 --> 01:48:45,330 Yo sólo voy a seguir ejecutando cualquier código que fue después de eso. 2278 01:48:45,330 --> 01:48:49,290 >> Y entonces cada vez que los datos están listos, entonces voy a procesarla. 2279 01:48:49,290 --> 01:48:50,540 Eso es todo lo que está diciendo. 2280 01:48:50,540 --> 01:48:52,795 2281 01:48:52,795 --> 01:48:56,710 >> AUDIENCIA: Ajax sólo hace código asíncrono? 2282 01:48:56,710 --> 01:48:58,560 >> JOSÉ ONG: Es un asíncrono camino de la búsqueda de datos. 2283 01:48:58,560 --> 01:49:01,230 Así que la primera cosa sobre Ajax es que me permite recuperar los datos 2284 01:49:01,230 --> 01:49:03,170 de un sitio web externo. 2285 01:49:03,170 --> 01:49:07,045 Y lo segundo es que se asegura que mi página no se cala mientras estoy 2286 01:49:07,045 --> 01:49:07,970 ir a buscar esos datos. 2287 01:49:07,970 --> 01:49:09,600 Esa es la parte asíncrona de la misma. 2288 01:49:09,600 --> 01:49:13,040 Porque va a otra parte, porque lo digo yo sigo pasando mientras 2289 01:49:13,040 --> 01:49:14,900 que es ir a buscar que los datos, que hace que sea asíncrono. 2290 01:49:14,900 --> 01:49:17,170 Sigo ejecución. 2291 01:49:17,170 --> 01:49:18,960 >> Así que tenlo asíncrono idea en mente. 2292 01:49:18,960 --> 01:49:22,010 Y te voy a mostrar lo que la diferencia es. 2293 01:49:22,010 --> 01:49:23,920 La versión sincrónica está en el lado izquierdo. 2294 01:49:23,920 --> 01:49:26,240 La versión asíncrona está en el lado derecho. 2295 01:49:26,240 --> 01:49:29,170 Mire los números para ver cuál pasos corresponden a lo que 2296 01:49:29,170 --> 01:49:30,610 ejecuta en cada línea. 2297 01:49:30,610 --> 01:49:32,730 Allí, la alerta aparece en primer lugar. 2298 01:49:32,730 --> 01:49:34,590 Porque conseguir info de Yahoo! 2299 01:49:34,590 --> 01:49:37,250 toma de tres segundos, que se ahogue durante tres segundos. 2300 01:49:37,250 --> 01:49:39,880 Y entonces se avisa al precio después de esos tres segundos. 2301 01:49:39,880 --> 01:49:43,690 >> Así que ahora, que los programas de alerta hasta en ese momento - 2302 01:49:43,690 --> 01:49:44,610 tres segundos pulg 2303 01:49:44,610 --> 01:49:47,670 Y entonces se avisa por después de eso. 2304 01:49:47,670 --> 01:49:48,930 Por lo que sólo va paso a paso. 2305 01:49:48,930 --> 01:49:51,200 Es como lo que ustedes aceptaría, ¿correcto? 2306 01:49:51,200 --> 01:49:54,170 Con la ejecución asíncrona, que le avise primero. 2307 01:49:54,170 --> 01:49:57,410 Luego te vas a esta URL. 2308 01:49:57,410 --> 01:49:59,530 Y dices, voy a sólo pregunta por los datos. 2309 01:49:59,530 --> 01:50:01,170 Y luego voy a procesarla más tarde. 2310 01:50:01,170 --> 01:50:04,230 Por lo tanto, se ejecuta inmediatamente el siguiente línea después de hacer que 2311 01:50:04,230 --> 01:50:05,710 solicitud asincrónica. 2312 01:50:05,710 --> 01:50:08,920 >> Así que unos 0,001 segundos, verá hi alerta. 2313 01:50:08,920 --> 01:50:10,960 Ejecutar esa función, bye alerta. 2314 01:50:10,960 --> 01:50:14,240 Y porque yo hice una promesa que yo procesaría los datos más tarde, lo que 2315 01:50:14,240 --> 01:50:17,920 que pasa es que cuando los datos se vuelve tres segundos más adelante, entonces corro que 2316 01:50:17,920 --> 01:50:21,380 función que tengo allí. 2317 01:50:21,380 --> 01:50:21,870 ¿Sí? 2318 01:50:21,870 --> 01:50:25,750 >> AUDIENCIA: ¿Podría usted especificar o aclarar lo que significa Ajax? 2319 01:50:25,750 --> 01:50:30,460 >> JOSÉ ONG: Así Ajax es una manera de que si necesitan datos cuando estoy en un sitio web y yo 2320 01:50:30,460 --> 01:50:34,690 no quieren actualizar la página, a continuación, Yo uso esta tecnología llamada Ajax. 2321 01:50:34,690 --> 01:50:40,630 Eso sólo significa esencialmente, va búsqueda datos de otro sitio web. 2322 01:50:40,630 --> 01:50:43,724 Y hacerlo de una manera que sólo no estancar mi página web. 2323 01:50:43,724 --> 01:50:46,650 >> AUDIENCIA: ¿Así es que una inherente parte de JavaScript o jQuery? 2324 01:50:46,650 --> 01:50:50,590 >> JOSÉ ONG: Así que alguien escribió una manera de hacer esta en JavaScript hace mucho tiempo. 2325 01:50:50,590 --> 01:50:52,050 En un momento dado, no existía. 2326 01:50:52,050 --> 01:50:56,630 Y por lo que alguien inventó esta técnica para permitir que las personas que soliciten estos datos 2327 01:50:56,630 --> 01:50:57,680 de esta manera. 2328 01:50:57,680 --> 01:50:59,550 Y ellos escribieron algunas cosas que lo haga por usted. 2329 01:50:59,550 --> 01:51:01,605 Y jQuery sólo te da esta muy buena manera de hacerlo 2330 01:51:01,605 --> 01:51:03,112 con estos $. obtener la función. 2331 01:51:03,112 --> 01:51:07,200 2332 01:51:07,200 --> 01:51:09,480 ¿preguntas? 2333 01:51:09,480 --> 01:51:11,560 Puedo responder a preguntas sobre Ajax después también. 2334 01:51:11,560 --> 01:51:13,870 Voy a estar aquí. 2335 01:51:13,870 --> 01:51:16,390 >> Así que vamos a buscarnos datos sin actualizar la página. 2336 01:51:16,390 --> 01:51:18,200 Y vamos a hacer esto en de manera asíncrona que 2337 01:51:18,200 --> 01:51:19,450 no se congela la página. 2338 01:51:19,450 --> 01:51:22,680 2339 01:51:22,680 --> 01:51:27,310 Demasiado largo, no leyó si eso explicación era demasiado largo para usted. 2340 01:51:27,310 --> 01:51:29,430 Así que finalmente, cross-site ataques de scripting. 2341 01:51:29,430 --> 01:51:30,910 Vimos esto con Zamyla. 2342 01:51:30,910 --> 01:51:34,285 Si en mi base de datos que alguien tiene este nombre, que es esta etiqueta script, y yo 2343 01:51:34,285 --> 01:51:38,280 tener algo de código en mi página que se imprime los nombres de las personas en una fila, o tengo 2344 01:51:38,280 --> 01:51:43,310 algo de código JavaScript que se inserta este nombre en la página, 2345 01:51:43,310 --> 01:51:45,680 lo consigue HTML producido? 2346 01:51:45,680 --> 01:51:47,290 Bueno, yo imprimo la etiqueta HTML. 2347 01:51:47,290 --> 01:51:48,390 Imprimo todas estas etiquetas. 2348 01:51:48,390 --> 01:51:50,740 >> Llego a la parte en la que estoy de impresión salir con mis amigos. 2349 01:51:50,740 --> 01:51:52,980 Imprimo a Lauren. 2350 01:51:52,980 --> 01:51:54,200 Se imprime Milo fuera. 2351 01:51:54,200 --> 01:51:56,810 Y entonces mi nombre en la base de datos es posterior guión 2352 01:51:56,810 --> 01:51:58,060 unflattering estado de Facebook. 2353 01:51:58,060 --> 01:52:00,740 2354 01:52:00,740 --> 01:52:04,330 Porque yo inserté esto en la página porque parece que JavaScript cuando 2355 01:52:04,330 --> 01:52:07,930 esta página se envía al usuario, el fichero es ejecutado como JavaScript. 2356 01:52:07,930 --> 01:52:10,800 Y esto es lo que llamamos un ataque de cross-site scripting. 2357 01:52:10,800 --> 01:52:14,570 Alguien pone información maliciosa en su base de datos que pudiera corresponderles 2358 01:52:14,570 --> 01:52:17,080 alguna cadena adicional o alguna cadena JavaScript. 2359 01:52:17,080 --> 01:52:20,130 >> Y cuando se imprime a la página de esta manera, entonces, ¿qué 2360 01:52:20,130 --> 01:52:22,580 que pasa es que mal código es ejecutado que yo no tenía la intención 2361 01:52:22,580 --> 01:52:25,110 a que se ha podido ejecutar. 2362 01:52:25,110 --> 01:52:28,230 Y eso es todo un cross-site ataque de scripting es. 2363 01:52:28,230 --> 01:52:31,790 Y la manera de conseguir alrededor esto es como Zamyla dijo. 2364 01:52:31,790 --> 01:52:34,340 Usted acaba de envolver las cosas en HTML caracteres especiales. 2365 01:52:34,340 --> 01:52:39,460 Y este HTML caracteres especiales es un PHP función que evite este tipo 2366 01:52:39,460 --> 01:52:42,000 de lo que le suceda a usted si usted tiene un malicioso 2367 01:52:42,000 --> 01:52:43,830 cadena en su base de datos. 2368 01:52:43,830 --> 01:52:47,650 Simplemente escapa, de manera que no hace conseguir interpretado como HTML. 2369 01:52:47,650 --> 01:52:50,960 Sustituye a los pequeños soportes con lo que llamamos entidades. 2370 01:52:50,960 --> 01:52:52,250 Y pasamos esto en la conferencia también. 2371 01:52:52,250 --> 01:52:55,800 Así que creo que ustedes deberían tener una buena comprensión de eso. 2372 01:52:55,800 --> 01:52:57,420 ¿Preguntas? 2373 01:52:57,420 --> 01:52:57,820 Sí. 2374 01:52:57,820 --> 01:53:00,860 >> AUDIENCIA: Entonces, ¿cómo lo haría la [inaudible]? 2375 01:53:00,860 --> 01:53:01,555 >> JOSÉ ONG: Dilo de nuevo. 2376 01:53:01,555 --> 01:53:02,500 >> AUDIENCIA: ¿Cómo sería el monitor - 2377 01:53:02,500 --> 01:53:02,860 >> JOSÉ ONG: Así es. 2378 01:53:02,860 --> 01:53:06,080 Así que hay algo que dice, cuando Me registro, escriba en mi nombre. 2379 01:53:06,080 --> 01:53:09,390 Acabo de escribir en ese campo, mi nombre es stript mensaje poco halagüeño Facebook 2380 01:53:09,390 --> 01:53:11,570 estado cerca etiqueta de script. 2381 01:53:11,570 --> 01:53:15,690 Y eso sólo consigue poner en la base de datos, porque no puedo decir que alguien 2382 01:53:15,690 --> 01:53:18,260 en el mundo no tiene un nombre con una flecha hacia la izquierda en él o la 2383 01:53:18,260 --> 01:53:19,036 escritura de la palabra en ella. 2384 01:53:19,036 --> 01:53:21,330 Eso no tiene mucho sentido. 2385 01:53:21,330 --> 01:53:24,560 Así que sólo tengo que asegurarme de que desinfectar las cosas antes de que yo imprimo 2386 01:53:24,560 --> 01:53:25,420 a la página. 2387 01:53:25,420 --> 01:53:27,140 >> AUDIENCIA: Así que las tarjetas especiales de HTML impide que las etiquetas de script? 2388 01:53:27,140 --> 01:53:28,710 >> JOSÉ ONG: Si. 2389 01:53:28,710 --> 01:53:29,960 Por lo tanto, no impide que las etiquetas de script. 2390 01:53:29,960 --> 01:53:32,320 Simplemente se asegura de que el etiquetas de script no reciben 2391 01:53:32,320 --> 01:53:35,120 interpretado como HTML o - 2392 01:53:35,120 --> 01:53:35,400 sí. 2393 01:53:35,400 --> 01:53:38,470 Simplemente hará como lo lo que realmente es. 2394 01:53:38,470 --> 01:53:39,220 Está bien. 2395 01:53:39,220 --> 01:53:40,930 Así que esa fue la revisión del cuestionario. 2396 01:53:40,930 --> 01:53:41,830 Genial. 2397 01:53:41,830 --> 01:53:45,088 >> [Aplausos]