1
00:00:10,120 --> 00:00:18,720
Bienvenidos a una nueva clase y habíamos quedado en la acción de subir o actualizar la imagen del usuario.

2
00:00:18,780 --> 00:00:21,750
Bueno y qué hago acá en la base de datos.

3
00:00:21,760 --> 00:00:27,540
Estoy en PHP y admin pegándole una mirada a la tabla.

4
00:00:27,580 --> 00:00:33,010
Usuarios y cómo ven ha aparecido algo nuevo sí señor.

5
00:00:33,030 --> 00:00:41,100
Le he agregado usuarios imagen una nueva columna cómo lo hice simple aquí abajo está la opción de agregar

6
00:00:41,190 --> 00:00:48,120
y yo puedo poner X cantidad de columnas y puedo decir en donde agregarla si es que tengo alguna preferencia

7
00:00:48,120 --> 00:00:49,020
por el orden.

8
00:00:49,030 --> 00:00:54,740
Bueno yo simplemente le dije que le agregará después de la última columna que esos usuarios ùltimo lo

9
00:00:54,740 --> 00:00:57,290
bien que le va a agregar.

10
00:00:57,300 --> 00:01:04,100
Aquí ya apareció pero yo no tengo problemas en agregar otra columna si así lo necesitara.

11
00:01:04,100 --> 00:01:15,960
No sé edad bueno en este caso sería usuarios edad tipo entero y yo elegiría los valores pero luego simplemente

12
00:01:15,960 --> 00:01:21,510
guardar y esto ustedes ya lo saben hacer esta columna vamos a analizar.

13
00:01:21,510 --> 00:01:25,740
Yo me voy a venir a cada estructura aceptar veamos

14
00:01:31,800 --> 00:01:34,610
de nuevo me voy a la estructura de la tabla.

15
00:01:34,630 --> 00:01:39,040
Usuarios y la columna usuarios imagen.

16
00:01:39,100 --> 00:01:42,250
Yo he elegido un parchar de 200.

17
00:01:42,250 --> 00:01:48,250
Es cierto es probable que sea una exageración pero dado que los nombres de las imágenes la ruta que

18
00:01:48,250 --> 00:01:53,220
puede contener también a dónde se vaya a terminar guardando puede ser algo larga.

19
00:01:53,230 --> 00:01:58,420
Yo me aseguro con 200 caracteres después nada en especial.

20
00:01:58,420 --> 00:02:05,650
Es bastante simple la columna que he agregado pero retomando el hecho de subir la imagen nosotros teníamos

21
00:02:05,740 --> 00:02:14,080
este formulario que va a enviar el archivo de la imagen a nuestro propio o a nuestro mismo archivo PHP

22
00:02:14,230 --> 00:02:14,880
aquí arriba.

23
00:02:15,250 --> 00:02:20,860
Entonces yo tengo que estar preparado para recibir esa imagen.

24
00:02:20,880 --> 00:02:24,300
Bueno vamos a estudiar algunas cosas nuevas.

25
00:02:24,340 --> 00:02:28,070
Se acuerdan que habíamos creado un archivo llamado funciones punto PHP.

26
00:02:28,540 --> 00:02:36,930
Bueno está por acabar voy a abrir acá el árbol y ya lo tenía listo aunque hasta ahí está funciones punto

27
00:02:36,930 --> 00:02:38,190
PHP.

28
00:02:38,190 --> 00:02:44,530
La idea es ahí ir acumulando todas las funciones de nuestra plataforma como yo sé que van a ser pocas.

29
00:02:44,550 --> 00:02:47,520
Es que yo creo un solo archivo funciones.

30
00:02:47,700 --> 00:02:54,090
Si el proyecto lo amerita incluso podría tener varios archivos funciones por ejemplo funciones de estadísticas

31
00:02:54,090 --> 00:02:59,780
funciones de usuario funciones de configuración distintos archivos de funciones.

32
00:02:59,910 --> 00:03:02,280
Eso me va a ayudar muchísimo al orden.

33
00:03:02,730 --> 00:03:13,410
Cómo hago para que todo el código PHP que ponga en este archivo se incluya dentro de Configuración porque

34
00:03:13,410 --> 00:03:19,210
en definitiva eso es lo que va a hacer esta línea que estoy poniendo acá.

35
00:03:19,300 --> 00:03:22,120
Es una función propia de PHP.

36
00:03:22,120 --> 00:03:31,870
En realidad la función originales Ricoeur digamos que es la función clásica es la acción de incluir

37
00:03:32,290 --> 00:03:34,900
un PHP dentro de otro PHP.

38
00:03:34,900 --> 00:03:42,930
Sería lo mismo ir al archivo funciones copiar todo el código y pegarlo acá dentro de Configuración.

39
00:03:43,030 --> 00:03:51,430
Bueno hay otra versión del Recoil que se llama Recoil Guanes o incluir una sola vez.

40
00:03:51,430 --> 00:03:58,060
Esto me asegura de que si por error en otra parte del código o en otro archivo también estoy haciendo

41
00:03:58,420 --> 00:04:05,140
un recuadro a funciones lo cargue una sola vez y no se duplique el contenido lo que lógicamente va a

42
00:04:05,140 --> 00:04:10,390
dar error porque por ejemplo una función no se le puede declarar dos veces una variable que puedo tener

43
00:04:10,390 --> 00:04:13,020
declarada y no se puede declarar dos veces.

44
00:04:13,030 --> 00:04:17,470
Si yo incluye dos veces este Código va a estar todo duplicado.

45
00:04:17,470 --> 00:04:21,890
Entonces el recuerdo 11 me asegura que no vaya a ser cosa.

46
00:04:22,000 --> 00:04:26,490
Supongamos que acá en este proyecto intervenimos muchos programadores.

47
00:04:26,510 --> 00:04:33,880
Bueno si otro programador lo incluye en otra parte del código nos aseguramos de que no genere error

48
00:04:34,180 --> 00:04:35,870
se va incluir una sola vez.

49
00:04:35,950 --> 00:04:39,210
Si ya lo encuentra incluido no lo incluye.

50
00:04:39,210 --> 00:04:47,230
Bueno teniendo las funciones cargadas aquí ya vamos a ver que vamos a poner por supuesto en ese archivo.

51
00:04:47,230 --> 00:04:54,850
Ahora es tarea de recibir el post que se está enviando con los archivos o con el archivo en este caso

52
00:04:54,850 --> 00:04:58,590
porque se está viendo uno solo que va a ser el archivo de la imagen.

53
00:05:00,250 --> 00:05:08,320
Entonces recuerdan que antes usábamos en algún lugar esto IFF post que en definitiva estaba preguntando

54
00:05:08,320 --> 00:05:10,430
si estás llegando algo por.

55
00:05:11,140 --> 00:05:20,140
Bueno de la misma manera hay una súper variable que es fails a donde aquí van a venir los o el archivo

56
00:05:20,200 --> 00:05:24,970
que se esté enviando por post y que está llegando a este PHP.

57
00:05:24,970 --> 00:05:26,390
Por qué pongo este IHF.

58
00:05:26,530 --> 00:05:32,200
Antes de procesar y recuperar el archivo que venga o lo que fuere que vaya a hacer porque yo no quiero

59
00:05:32,200 --> 00:05:41,190
que me dé un error pasa lo mismo vamos aquí ya estoy en la web y esto que cuando entro estoy apretando

60
00:05:41,190 --> 00:05:49,680
enter y entrando una y otra vez o incluso actualizando no me dé error porque estoy ingresando a Configuración

61
00:05:49,680 --> 00:05:51,620
y no estoy enviando ningún archivo.

62
00:05:51,690 --> 00:05:57,720
Si no hiciera esto de controlar si estás llegando archivo al querer poner los archivos que lleguen en

63
00:05:57,720 --> 00:06:00,720
una variable o procesarlos me daría error.

64
00:06:00,730 --> 00:06:07,700
Bueno pero cómo haríamos para grabar el archivo en el disco duro del servidor o sea como dijimos anteriormente.

65
00:06:07,710 --> 00:06:13,080
Yo quiero que se grabe aquí en esta carpeta Archivos que yo he creado y los he subido algunas imágenes

66
00:06:13,080 --> 00:06:13,620
de prueba.

67
00:06:13,890 --> 00:06:22,370
Pero bueno ustedes lo van a tener vacío por supuesto a esta carpeta y cómo haríamos para que se graben

68
00:06:22,370 --> 00:06:22,760
ahí.

69
00:06:23,420 --> 00:06:29,360
Bueno es muy fácil buscar ejemplos en la web y Miren este es uno de ellos.

70
00:06:29,390 --> 00:06:33,590
Es un clásico y vamos a analizar.

71
00:06:33,700 --> 00:06:36,760
Línea por línea este ejemplo.

72
00:06:36,760 --> 00:06:44,350
Bueno lo primero que hacemos es crear una variable a donde vamos a poner la ruta de a dónde queremos

73
00:06:44,350 --> 00:06:46,060
guardar estos archivos.

74
00:06:46,090 --> 00:06:52,540
Como ven yo tengo aquí una carpeta de archivos preparada para alojar estas imágenes que vamos que vamos

75
00:06:52,540 --> 00:07:01,910
a ir subiendo Bueno yo tengo eso por un lado luego voy a crear otra variable que se va a llamar fichero

76
00:07:01,910 --> 00:07:02,540
subido

77
00:07:05,300 --> 00:07:07,360
o lo que es mejor voy a renombrar esto.

78
00:07:07,580 --> 00:07:12,080
Miren vamos a mejorar este ejemplo que yo copié lo copio de una página muy importante pero me parece

79
00:07:12,350 --> 00:07:17,510
que podemos mejorar el nombre en español y que le damos a las variables para que nos ayude a entender

80
00:07:17,510 --> 00:07:19,510
mejor cómo funciona esto.

81
00:07:19,640 --> 00:07:22,960
Entonces a esto le voy a poner ruta completa

82
00:07:25,460 --> 00:07:34,950
hasta por qué esta recién sólo obtenía archivos yo solo estoy poniendo la carpeta a donde voy a guardar

83
00:07:35,250 --> 00:07:39,330
en ruta completa estoy cocinando ya estoy sumando archivos.

84
00:07:39,330 --> 00:07:44,180
Por qué digo que estos archivos y por qué es esta variable de acá a donde guardé esto hoy se entiende

85
00:07:45,400 --> 00:07:54,160
tengo archivos y le voy a concatenar lo siguiente base Nahim ahí vamos anotando a nuestro bloc de notas

86
00:07:54,190 --> 00:07:55,510
de funciones útiles.

87
00:07:55,510 --> 00:08:05,320
Esta es otra función de PHP que cuando yo le paso una ruta completa no importa cuan larga sea de archivos

88
00:08:05,320 --> 00:08:11,550
barra esta barra lo otro barrio el otro barra el otro porque puede pasar que tengamos direcciones así.

89
00:08:11,680 --> 00:08:14,650
Lo que me va a pasar es la última parte de la ruta.

90
00:08:14,650 --> 00:08:23,650
Por ejemplo si esto fuera archivos y sería esto imagen punto JPG el archivo o le pongo para que se note

91
00:08:23,650 --> 00:08:24,080
que es.

92
00:08:24,100 --> 00:08:29,950
Por ejemplo Pablo JPG una foto mía para subir.

93
00:08:29,950 --> 00:08:32,670
Supongamos que este es el estreno completo el base.

94
00:08:32,770 --> 00:08:38,100
Lo que hace es extraer el resto y dejar solo el final bueno.

95
00:08:38,120 --> 00:08:41,000
Por qué hago esto.

96
00:08:41,260 --> 00:08:47,370
Hay muchas cosas que tenemos que ver al mismo tiempo y sé que puede ser difícil esta es la súper variable

97
00:08:47,430 --> 00:08:48,930
por donde vienen los archivos.

98
00:08:48,960 --> 00:08:49,730
Hasta ahí estamos.

99
00:08:49,740 --> 00:08:50,970
Es como si fuera el post.

100
00:08:51,740 --> 00:08:57,580
Cómo encuentro yo porque pueden venir muchos archivos por ese post como encuentro.

101
00:08:57,580 --> 00:08:58,990
Cuál es el que yo quiero.

102
00:08:58,990 --> 00:09:05,260
Bueno yo tengo que buscar acá con qué etiqueta había mandado el imput de archivos.

103
00:09:05,260 --> 00:09:11,510
De dónde sale esta etiqueta de archivo por ahí hay tantos archivos que nos confundimos pero vamos las

104
00:09:11,570 --> 00:09:13,540
Busquemos esa etiqueta.

105
00:09:13,540 --> 00:09:14,900
Vamos a repasarlo.

106
00:09:14,900 --> 00:09:20,580
No importa cuántas veces lo tengamos que hacer mientras lo entendamos la etiqueta sale de aquí.

107
00:09:20,600 --> 00:09:23,670
Este es el input del formulario para enviar archivos.

108
00:09:23,870 --> 00:09:31,780
Bien como todo imput tiene un nein que es la etiqueta con la que enviamos la información a PHP y esta

109
00:09:31,790 --> 00:09:38,960
etiqueta es con la que desde PHP vamos a buscar en esa maraña de información que llega.

110
00:09:39,080 --> 00:09:41,120
Cuál es nuestro paquete.

111
00:09:41,120 --> 00:09:51,790
Nuestro envío bien por eso lo pongo acá como Fish es una raíz multidimensional dentro de el array Fish

112
00:09:51,870 --> 00:09:52,720
Archivo.

113
00:09:52,850 --> 00:09:57,160
Hay otro índice que puede buscar que es Nein que me va a traer el nombre.

114
00:09:57,170 --> 00:10:03,800
Lo que sucede es que poniendo esto me va a traer la ruta completa la que sube temporalmente que es este

115
00:10:03,800 --> 00:10:07,100
archivo y la verdad es que yo no sé dónde está este archivo.

116
00:10:07,100 --> 00:10:13,850
Quizás tiene una ruta larguísima entonces por eso utilizo base Baseline para extraer cualquier ruta

117
00:10:13,850 --> 00:10:18,960
que tenga antes y sólo traerme en definitiva se lo voy a responder así.

118
00:10:19,010 --> 00:10:25,190
Esto es lo que hace solamente traerme el nombre del archivo y la extensión estamos yo lo que estoy haciendo

119
00:10:25,190 --> 00:10:34,370
aquí es filtrar cómo lo que me llega acá es el nombre del archivo más toda la ruta que hay hasta configuración

120
00:10:34,370 --> 00:10:43,460
punta punto PHP que yo desconozco cuánta barra barra porque es mejor configuración punto PHP está dentro

121
00:10:43,460 --> 00:10:45,960
de la carpeta raíz.

122
00:10:45,960 --> 00:10:49,580
Más sistema más índex más esto más otro y es larguísimo.

123
00:10:49,720 --> 00:10:56,040
Yo quiero borrar todo eso y dejarme solamente el final eso lo hago gracias a la función base Henaine.

124
00:10:56,440 --> 00:11:03,610
Entonces lo que hago con esto es que lo que estoy pintando acá se va a transformar en el nombre del

125
00:11:03,610 --> 00:11:04,050
archivo.

126
00:11:04,060 --> 00:11:10,450
Por ejemplo yo lo voy a dejar Code Araca Pablo punto JPG.

127
00:11:11,320 --> 00:11:17,200
Entonces cuando yo estoy sumando esto más esto me va a quedar así.

128
00:11:17,200 --> 00:11:19,420
Algo así sería Pablo punto.

129
00:11:19,720 --> 00:11:29,800
JPG me está quedando la ruta final completa de a dónde tengo que terminar guardando dicho archivo.

130
00:11:29,800 --> 00:11:32,070
Voy a hacer control Z para dejar todo como estaba.

131
00:11:33,110 --> 00:11:40,150
A ver a mí me gusta perfecto bueno sin querer.

132
00:11:40,150 --> 00:11:45,910
Acabo de decir ruta final casi que me gusta más que ruta completa ruta final

133
00:11:49,320 --> 00:11:56,510
bueno acá en el ejemplo que hemos copiado utilizan un eco Pré para darle un poco más de orden a lo que

134
00:11:56,510 --> 00:11:59,320
se va a imprimir después es opcional.

135
00:11:59,370 --> 00:12:04,880
Bueno sigamos con conceptos más bien teóricos y bastante densos a veces.

136
00:12:04,970 --> 00:12:11,240
Pero bueno esto es más que todo para que los tengan pero recuerden que esto que vamos a ver a continuación

137
00:12:11,300 --> 00:12:16,010
no esto lo vamos a mejorar muchísimo nuestra manera de recibir archivos.

138
00:12:16,010 --> 00:12:23,560
Van a ver que vamos a guardar lo que vamos a proponer la forma final de guardar archivos.

139
00:12:23,600 --> 00:12:29,330
Si les recomiendo casi como obligado guardarla en el bloc de notas para que cada vez que necesiten subir

140
00:12:29,390 --> 00:12:35,270
y guardar archivos lo hagan de esta manera que puedan mejorarla seguro y si lo hacen no se olviden de

141
00:12:35,270 --> 00:12:36,140
compartirlo.

142
00:12:36,440 --> 00:12:43,610
Bueno repasemos otro concepto técnico en estas dos líneas no hago más que jugar con los nombres de los

143
00:12:43,610 --> 00:12:48,890
archivos tanto con el que voy a grabar con el que me llega yo estoy procesando nombres no el archivo

144
00:12:48,890 --> 00:12:56,480
propiamente dicho en cuanto se realizó el post en cuanto yo hice clic en el botón Enviar que tengo en

145
00:12:56,480 --> 00:13:03,930
mi front end el archivo ya llegó a PHP y ya se grabó de manera temporal no definitiva.

146
00:13:03,980 --> 00:13:10,820
Por eso yo me estoy preparando acá con un nombre definitivo para guardar esa información temporal que

147
00:13:10,820 --> 00:13:17,360
está aguantando PHP y que si no la guarda en ningún lado con certeza va a desaparecer y se va a perder.

148
00:13:17,350 --> 00:13:21,360
Bueno entonces vean la línea que voy a pintar ahora

149
00:13:24,800 --> 00:13:33,740
esta línea que acabo de pintar acá lo que hace es transferir ese archivo temporal a un archivo real

150
00:13:33,770 --> 00:13:35,990
final que va a estar guardado aquí.

151
00:13:36,020 --> 00:13:41,260
Cómo funciona esta función que es otra de las interesantes para notar en nuestro bloc de notas.

152
00:13:41,360 --> 00:13:46,800
Funciona de la siguiente manera le voy a pasar a esa función entre paréntesis nada más.

153
00:13:46,840 --> 00:13:51,090
Miren qué fácil que es dos valores el primer valor

154
00:13:55,070 --> 00:14:00,380
va a ser el archivo propiamente dicho y el archivo también lo tengo aquí vamos a poner acá tengo que

155
00:14:00,380 --> 00:14:02,220
cambiar el índice.

156
00:14:02,260 --> 00:14:11,760
Ahí está ben sería lo mismo que esto que tengo acá el primer valor es el archivo que quiero grabar porque

157
00:14:11,770 --> 00:14:17,170
en definitiva esto que tengo acá además de contener el nombre a mí me vino de diez porque va a ser lo

158
00:14:17,170 --> 00:14:20,540
que hace es extraer el nombre del archivo.

159
00:14:20,650 --> 00:14:27,240
Eso ya lo prendimos bien pero lo que yo tengo acá no solamente es el nombre también es el archivo temporal

160
00:14:27,510 --> 00:14:28,860
del que yo les hablo.

161
00:14:28,860 --> 00:14:31,380
Tenemos que hacerlo definitivo grabarlo.

162
00:14:31,380 --> 00:14:38,600
Entonces son solamente dos valores que les paso a esta función MOF habló de.

163
00:14:38,930 --> 00:14:46,240
O sea mover el archivo subido PHP lo da por subido subió está grabado es otra cosa.

164
00:14:46,350 --> 00:14:54,690
Entonces la segunda variable o el segundo valor que le voy a pasar es el lugar definitivo el hogar definitivo

165
00:14:54,690 --> 00:14:57,330
que va a tener ese archivo con nombre y todo.

166
00:14:57,390 --> 00:15:06,340
Entonces acá voy a modificar porque esto quedó del ejemplo aquí sí me aprovecho de ruta final simple

167
00:15:07,000 --> 00:15:13,650
qué es lo que quiero grabar dónde lo quiero grabar por qué está entre un IFF muy simple.

168
00:15:13,660 --> 00:15:19,580
Por qué esta función si devuelve un valor devuelve true o Fool's Tru.

169
00:15:19,720 --> 00:15:23,720
Si se pudo grabar correctamente o Fool's si la grabación falló.

170
00:15:24,220 --> 00:15:30,540
Cómo que si puedes fallar te pudiste haber quedado sin lugar en el disco la carpeta si estabas en Linux

171
00:15:30,550 --> 00:15:33,990
a lo mejor no tenía permisos de escritura y no pudiste grabar.

172
00:15:34,120 --> 00:15:35,460
Se rompió algo se cortó la luz.

173
00:15:35,470 --> 00:15:37,630
No se pueden pasar mil cosas.

174
00:15:37,870 --> 00:15:43,750
Para que esto sucede no pasa casi nunca si es cierto y si pasa bueno entonces sí lo vamos a hacer de

175
00:15:43,750 --> 00:15:45,700
una manera un poco más correcta más prolija.

176
00:15:47,570 --> 00:15:53,570
Lo pongo dentro de ONIF como esto me va a devolver un Truc o un Fool's en función de si se pudo grabar

177
00:15:53,570 --> 00:15:54,200
o no.

178
00:15:54,560 --> 00:16:01,870
Yo voy a decir sí si se puede grabar listo imprime el fichero es válido si subió con éxito.

179
00:16:02,080 --> 00:16:09,310
Si no posible ataque de subida de ficheros esto la verdad es seguramente una exageración.

180
00:16:10,200 --> 00:16:16,380
Que haya habido una falla en esta parte ya no es sinónimo de que hoy me están atacando.

181
00:16:16,560 --> 00:16:24,570
Lamentablemente para nosotros tenemos que trabajar mucho más para detectar si hay un ataque y qué bueno

182
00:16:24,570 --> 00:16:25,590
que hablamos de esto.

183
00:16:25,650 --> 00:16:30,210
Por qué les digo que no nos vamos a quedar con esta versión y que la vamos a tener que mejorar porque

184
00:16:30,210 --> 00:16:37,740
a la hora de subir archivos a nuestra aplicación es uno de los puntos más vulnerables que existen a

185
00:16:37,740 --> 00:16:44,720
la hora de meternos código malicioso o a la hora de hacernos daño porque si no filtramos bien las cosas

186
00:16:44,720 --> 00:16:51,660
y no nos preocupamos por si esa imagen es realmente una imagen sin darnos cuenta nos pueden subir un

187
00:16:51,660 --> 00:16:58,980
archivo PHP con código malicioso y ejecutarlos desde el exterior y hacernos muchísimo daño entonces

188
00:16:59,030 --> 00:17:02,960
no nos tenemos que tomar a la ligera el proceso de subir archivos.

189
00:17:03,020 --> 00:17:10,100
Bueno no se asusten no se asusta de esto y saben qué lo voy a borrar.

190
00:17:10,120 --> 00:17:14,260
Sí pero no sin antes copiarlo.

191
00:17:14,490 --> 00:17:17,610
Lo que voy a hacer es no quiero que nos moleste esto por ningún motivo.

192
00:17:17,640 --> 00:17:24,450
Pero si se los dejo por acá al fondo de todo y hacer algo que no se debe pero es algo que lo hacemos

193
00:17:24,510 --> 00:17:33,960
entre ustedes y yo voy a pegar acá esto vamos a ser así yo lo voy a comentar para que no rompa nada

194
00:17:33,960 --> 00:17:40,920
en PHP pero para que a ustedes les quede esta manera simple de desgrabar archivos que no recomiendo

195
00:17:40,920 --> 00:17:44,310
para nada pero por las dudas quiero que quede registrado esto.

196
00:17:44,870 --> 00:17:48,840
Bueno si ustedes no van a hacer esto simplemente lo borran cuando usen este ejemplo.

197
00:17:49,810 --> 00:18:01,950
Bueno esto nos ha quedado despoblado ahora pero por qué miren yo lo que hago es si archivos o sea así

198
00:18:01,950 --> 00:18:10,570
está llegando algo llamo a una función que se llama graba imagen es una función de PHP y por el nombre

199
00:18:10,570 --> 00:18:15,280
ya nos damos cuenta que esto es bastante criollo o bastante latino.

200
00:18:15,280 --> 00:18:23,500
Es una función que yo he creado y a esta función le paso archivo y qué archivo.

201
00:18:23,510 --> 00:18:33,370
Bueno es esto es una variable que voy a crear y a donde voy a guardar lo que me está llegando.

202
00:18:33,390 --> 00:18:35,070
Bueno Kooper de acá abajo.

203
00:18:35,150 --> 00:18:39,340
Menos mal que lo dejé preparado aquí está

204
00:18:42,990 --> 00:18:48,160
ahí está lo peor acá Ahí está entonces lo que está llegando.

205
00:18:49,420 --> 00:18:52,240
Lo guardo en esta variable archivo.

206
00:18:52,240 --> 00:19:01,840
Luego llamo a la función graba imagen que va a ser la encargada como está diciendo su nombre de grabar

207
00:19:02,140 --> 00:19:05,770
el archivo que está llegando verdaderamente en un directorio real.

208
00:19:09,240 --> 00:19:16,620
Ahora bien esta función que ya vamos a ver no solamente cumple una orden de grabar lo que le estoy pasando

209
00:19:16,620 --> 00:19:23,970
sino que devuelve algo más y lo que va a devolver es un mensaje una string de ese mensaje si es que

210
00:19:23,970 --> 00:19:29,520
devuelve alguno va a contener cualquier posible error que se dé durante el proceso de grabado.

211
00:19:29,550 --> 00:19:36,330
Entonces yo lo que puedo hacer es matar dos pájaros de un tiro es crear acá una variable llamado MSG

212
00:19:36,360 --> 00:19:41,550
la típica que usamos para los mensajes podría ser cualquier otra cosa y voy a decir que va a ser igual

213
00:19:41,830 --> 00:19:43,980
a graba imagen y le pasó el archivo.

214
00:19:44,250 --> 00:19:48,970
Entonces después de que se complete la función acá me va a quedar guardadito el mensaje que me haya

215
00:19:49,020 --> 00:19:52,700
respondido esta función pero dónde está esta función.

216
00:19:52,770 --> 00:20:00,040
Bueno para eso hemos creado funciones punto PHP acá se lo tengo preparado y en este archivo punto PHP

217
00:20:00,120 --> 00:20:05,590
donde vamos a poner un montón de funciones que vamos a usar en nuestro maravilloso PHP Tube.

218
00:20:05,790 --> 00:20:12,660
Lo primero que hago es conectarme a la base de datos porque en la mayoría de las funciones opero con

219
00:20:12,660 --> 00:20:21,560
la base de datos Bueno acá está la función en cuestión es bastante largo lo que lleva adentro no se

220
00:20:21,560 --> 00:20:23,770
asusten no ha muerto nadie.

221
00:20:23,780 --> 00:20:27,930
Es bastante simple pero vamos a ver algunos detalles.

222
00:20:27,990 --> 00:20:30,420
Yo tengo la conexión aquí afuera.

223
00:20:30,420 --> 00:20:38,640
Recuerden que la conexión queda guardado en una variable llamada mail SQL y esto es muy importante porque

224
00:20:38,640 --> 00:20:41,410
después esta variable es la que yo voy a usar.

225
00:20:41,430 --> 00:20:50,400
Por ejemplo ya llegamos acá no se preocupen para hacer más SQL y Cuadri y ejecutamos una consulta

226
00:20:53,080 --> 00:20:58,480
pero acá se me presenta un problema más SQL y es una variable global que se puede usar en cualquier

227
00:20:58,480 --> 00:21:03,810
parte del código pero no voy a poder usar dentro de una función.

228
00:21:03,940 --> 00:21:04,380
Por qué.

229
00:21:04,450 --> 00:21:10,000
Porque no hay comunicación digamos se acuerdan cuando vimos el alcance de las variables esta variable

230
00:21:10,000 --> 00:21:13,400
que está acá afuera no funciona dentro de la función.

231
00:21:13,420 --> 00:21:20,500
De hecho si yo creara un mail SQL y nuevo dentro de la función no tendrían nada que ver serían independientes

232
00:21:20,530 --> 00:21:21,280
uno de otro.

233
00:21:21,340 --> 00:21:28,540
A pesar de tener el mismo nombre por suerte ustedes se acuerdan de que había unas súper variables llamadas

234
00:21:28,630 --> 00:21:37,090
globales y que poniendo como índice el nombre de la variable yo podía acceder dentro de una función.

235
00:21:37,120 --> 00:21:44,090
Entonces miren este truco por así decirlo de truco tiene poco vuelvo a crear Veámoslo de esta manera.

236
00:21:44,200 --> 00:21:52,830
Así vuelvo a crear una variable mi SQL y bueno así como está esta variable no tiene absolutamente nada

237
00:21:52,830 --> 00:21:55,700
que ver con esta de acá arriba.

238
00:21:56,910 --> 00:22:01,770
Pero ahora sí quedan vinculadas porque le estoy diciendo con esto

239
00:22:04,760 --> 00:22:11,020
hoy vamos a usar o vamos a traer este Malle SQL y para dentro de la función.

240
00:22:11,260 --> 00:22:15,710
Y ahora si este Maye se cuela y puedo decir que es lo mismo que esto de acá afuera

241
00:22:18,920 --> 00:22:25,080
por qué me estoy adelantando y digo que voy a usar Maye SQL o vamos a operar con la base de datos dentro

242
00:22:25,080 --> 00:22:26,110
de grabã imagen.

243
00:22:26,280 --> 00:22:32,190
Si la imagen va grabada en archivos buenos pero en algún lugar tengo que dejar asentado cuál es la ruta

244
00:22:32,190 --> 00:22:38,250
de la imagen por qué quiero asentar la ruta porque para cuando tenga que mostrarla voy a tener que recuperar

245
00:22:38,250 --> 00:22:42,810
de la base de datos la ruta para poder mostrar el circulito.

246
00:22:42,810 --> 00:22:48,290
No sé como estaba acá están las imágenes en dos lugares el círculo y el círculo.

247
00:22:49,170 --> 00:22:53,960
Cuando entremos voy a tener que recuperar la dirección no el archivo.

248
00:22:53,970 --> 00:23:01,410
La dirección de donde está grabado para esa dirección ponerla en etiquetas y M.G. para que aparezca

249
00:23:01,410 --> 00:23:11,050
aquí Bueno empecemos a analizar la función graba imagen como es de costumbre ya preparó una variable

250
00:23:11,050 --> 00:23:13,490
vacía llamada MSG.

251
00:23:13,810 --> 00:23:16,010
Lo que vine acá es bastante parecido a lo que hicimos recién.

252
00:23:16,040 --> 00:23:25,490
Miren es bastante bastante parecido si se toman algunas precauciones como filtrar el tipo de archivo

253
00:23:25,490 --> 00:23:33,710
que viene vamos a filtrar o comprobar sería la palabra el tamaño porque qué pasa si nos suben un archivo

254
00:23:33,760 --> 00:23:36,060
acumules supe comentar.

255
00:23:36,080 --> 00:23:42,560
Si no me equivoco de 5 giga bueno sería tremendo para nuestro servidor.

256
00:23:42,830 --> 00:23:54,090
Entonces veamos cómo opera en una variable y guardo la ruta muy similar a lo de recién guardo la ruta

257
00:23:54,090 --> 00:24:02,600
final sería esto acá en inglés han puesto ruta objetivo no me parece mal y después se crea una variable

258
00:24:02,930 --> 00:24:08,090
a donde dice Hublot OK o sea subida correcta.

259
00:24:08,300 --> 00:24:10,000
Le ponen igual a uno.

260
00:24:10,000 --> 00:24:16,820
Yo entiendo que es uno correcto sería incorrecto o fallido fallado bueno.

261
00:24:17,090 --> 00:24:22,280
En esta línea de acá que parece algo complejo pero no lo es se utiliza nuevamente funciones preestablecidas

262
00:24:22,280 --> 00:24:23,690
de PHP.

263
00:24:23,690 --> 00:24:26,370
La primera está acá lo que haces.

264
00:24:26,450 --> 00:24:27,860
Ya vamos a ver qué obtenemos aquí.

265
00:24:27,860 --> 00:24:37,030
Lo baja todo a minúsculas por si hay alguna mayúscula de por medio luego saca la información con esta

266
00:24:37,030 --> 00:24:46,170
función la información del archivo extrae el nombre y se queda solo con la extensión.

267
00:24:46,170 --> 00:24:52,920
En definitiva acá está guardando la extensión si es png jpg y por qué lo pone todo en minúscula porque

268
00:24:52,920 --> 00:24:59,220
si me están haciendo trampa porque después voy a comparar si el tipo de imágenes JPG y el tipo de imágenes

269
00:24:59,560 --> 00:25:05,610
se PNG pero si me hacen trampa y me ponen una letra mayúscula y en una letra minúscula para sortear

270
00:25:05,610 --> 00:25:10,580
mi sistema lo que hago es me asegura y pongo todo en minúscula se entiende.

271
00:25:10,590 --> 00:25:12,970
Acabo de guardar la extensión del archivo.

272
00:25:13,200 --> 00:25:16,460
Continuamos teniendo ya el tipo de archivo.

273
00:25:16,800 --> 00:25:23,300
Vamos a utilizar de nuevo una función de PHP que mírense describe por su propio nombre Phil existe.

274
00:25:23,370 --> 00:25:30,210
Le paso el Target Field la ruta completa y esta función lo que va a hacer es fijarse si no hay un archivo

275
00:25:30,210 --> 00:25:39,020
ya con ese nombre si ese es el caso mensaje la imagen ya existe y cómo hacíamos para registro login

276
00:25:39,200 --> 00:25:44,340
un B.R al final para ir concatenando y que me queden un mensaje debajo del otro

277
00:25:47,330 --> 00:25:56,630
se acuerdan que habíamos empezado con un plot okey igual a uno bueno en cuanto yo detecto un error listo

278
00:25:56,810 --> 00:25:57,770
ya lo pongo en cero.

279
00:25:57,770 --> 00:26:06,140
A esto se dan cuenta ya vamos a ver cómo operamos con esto cómo tomamos un camino diferente ya que hemos

280
00:26:06,140 --> 00:26:09,340
cambiado el estado de esta variable tan importante.

281
00:26:11,390 --> 00:26:15,180
Esto también es fundamental aquí vamos a chequear.

282
00:26:15,330 --> 00:26:18,800
No necesita mayor explicación sobre todo ya para colegas como ustedes.

283
00:26:18,810 --> 00:26:24,340
Vamos a chequear el tamaño del archivo el tamaño máximo en el caso de que lo supere.

284
00:26:24,880 --> 00:26:33,300
Bueno pongo un mensaje apropiado en la variable mensaje por supuesto por las dudas de que hubiera estado

285
00:26:33,300 --> 00:26:34,630
en uno.

286
00:26:36,190 --> 00:26:40,290
A la subida correcta que querría decir esta variable ya lo pongo en cero.

287
00:26:40,290 --> 00:26:41,490
No no. Algo falló.

288
00:26:43,370 --> 00:26:44,990
Otra cosa es que se quiera en el camino.

289
00:26:44,990 --> 00:26:45,350
Por qué.

290
00:26:45,350 --> 00:26:47,570
Porque tranquilamente podría haber dado bien.

291
00:26:47,570 --> 00:26:53,000
Esto pasó bien seguimos con la variable en 1 pero nos encontramos con que nos están queriendo subir

292
00:26:53,000 --> 00:26:54,800
un archivo punto PHP.

293
00:26:54,800 --> 00:27:05,540
No no señor solo vamos a dejar subir archivos que sean de tipo jpg png J.P. y GIF como lo hago otra

294
00:27:05,540 --> 00:27:13,620
vez de este gif si el archivo es distinto de JPG y es distinto de PNG.

295
00:27:13,620 --> 00:27:17,080
En definitiva si no es ninguno de todos estos casos bueno.

296
00:27:17,130 --> 00:27:28,260
Archivo un mensaje con mensaje y grabo algo que hable respecto a si obramos en consecuencia ya tenemos

297
00:27:29,220 --> 00:27:35,310
descartado el hecho de que nos pongan un archivo que no corresponde con lo que esperamos y ahora sí

298
00:27:35,400 --> 00:27:36,270
llegó el momento.

299
00:27:36,270 --> 00:27:47,580
Si llegamos a este punto y esta variable es igual a cero en el mensaje le vamos a agregar también lo

300
00:27:47,580 --> 00:27:50,760
siento la imagen no pudo subir.

301
00:27:50,760 --> 00:27:57,710
Ahora bien si es igual a 1 aplico parte del código que habíamos visto recién se acuerdan.

302
00:27:57,820 --> 00:28:04,830
Observad fail muevo el archivo temporal a un archivo definitivo utilizo Elif.

303
00:28:04,910 --> 00:28:05,570
Por qué.

304
00:28:05,580 --> 00:28:12,730
Porque quiero saber si es correcto bueno un nuevo mensaje y aprovecho y pongo la imagen acá está mal

305
00:28:13,150 --> 00:28:22,040
el mensaje tomar la imagen y el nombre de la imagen con la ruta y todo ha sido subida.

306
00:28:22,050 --> 00:28:27,400
Perdón si la ruta que estoy poniendo solamente el nombre de la imagen ha sido subida el nombre del archivo

307
00:28:27,400 --> 00:28:29,770
de la imagen para ser exactos.

308
00:28:29,870 --> 00:28:36,900
Si en este proceso hubo un error puedo decir también agregar acá para eso.

309
00:28:37,380 --> 00:28:44,610
Así no pudo grabarse y agregar como mensaje hubo un error pero el error este es muy particular porque

310
00:28:44,610 --> 00:28:48,930
es a la hora de grabar el disco.

311
00:28:49,200 --> 00:28:57,060
La imagen viaja por las dudas le ponemos el Berk estimo que no haría falta porque eso sería el último

312
00:28:57,060 --> 00:28:59,070
mensaje bueno

313
00:29:02,130 --> 00:29:09,460
ahora si fue exitoso eso sería en este punto sólo si fue exitoso.

314
00:29:09,460 --> 00:29:18,230
Yo voy a tener que actualizar la ruta de la imagen que voy a guardar en mi base de datos.

315
00:29:18,710 --> 00:29:25,220
Entonces vuelvo al código acá tengo preparada la consulta miren que simple qué es.

316
00:29:26,360 --> 00:29:31,300
Pero aparece un componente súper importante que quiero compartir con ustedes.

317
00:29:31,320 --> 00:29:35,030
Bueno puedo utilizar tranquilo el mail SQL y por qué.

318
00:29:35,030 --> 00:29:38,230
Porque eso dijimos lo trajimos gracias a global.

319
00:29:38,300 --> 00:29:44,130
Dentro de la función QWERTY para aplicar una consulta y la consulta de alguna que ya sabemos usar.

320
00:29:44,360 --> 00:29:52,310
Actualizar de la tabla usuarios y vamos a aceptar esta nueva columna que espera un parchar o string

321
00:29:52,940 --> 00:29:57,190
que se llama usuarios imagen le vamos a aceptar.

322
00:29:57,200 --> 00:30:06,050
Qué valor Target Field Target fail era la ruta más el nombre del archivo con la barra por supuesto pero

323
00:30:06,140 --> 00:30:06,820
les pregunto yo.

324
00:30:06,860 --> 00:30:11,420
Miren esto en mi tabla usuarios yo estuve borrando limpiando un poco de usuarios y me han quedado solo

325
00:30:11,420 --> 00:30:11,750
dos.

326
00:30:11,750 --> 00:30:14,750
Yo podría tener 100 200 mil usuarios.

327
00:30:14,750 --> 00:30:22,160
Yo pregunto cuando actualice este valor se lo voy a actualizar a todos los usuarios no esta foto esta

328
00:30:22,160 --> 00:30:30,340
dirección que ven acá hasta tengo grabada alguna prueba esta ruta a tirar un poco para que se vea mejor.

329
00:30:34,600 --> 00:30:41,540
Ahora si esta ruta que tengo acá no se la voy a actualizar a todos por igual.

330
00:30:41,630 --> 00:30:49,280
Solamente tengo que actualizarla en mi usuario en el que está el Oviedo entonces voy a tener que prestar

331
00:30:49,280 --> 00:31:00,820
mucha atención en el Wer sestear Target Field en columnas en la columna perdón usuarios imagen donde

332
00:31:01,370 --> 00:31:02,160
usuario.

333
00:31:02,170 --> 00:31:10,190
Ahí sí hay igual y yo quiero poner mi usuario vi y se acuerdan que en el Lovin Miren voy a venir del

334
00:31:10,190 --> 00:31:10,640
Lovin

335
00:31:13,980 --> 00:31:14,870
miren lo que hacíamos.

336
00:31:14,880 --> 00:31:20,520
Se acuerdan que habíamos activado variables de sesión y estábamos poniendo todas las variables dentro

337
00:31:20,520 --> 00:31:25,810
de una variable de sesión y yo les dije el usuario Heydi lo vamos a usar a cada rato.

338
00:31:25,820 --> 00:31:33,030
Bueno llegó el momento de usarlo quiero traer mi Heydi de usuario para filtrar y que solo se aplique

339
00:31:33,030 --> 00:31:34,980
este cambio a mi propio usuario.

340
00:31:35,400 --> 00:31:41,570
Entonces acabo de utilizar sesión en la red de variables de sesión y le voy a pasar como índice.

341
00:31:41,630 --> 00:31:47,840
Usuarios Heydi porque en definitiva creo si no me equivoco mi user Heydi era el número 5.

342
00:31:47,980 --> 00:31:52,230
Bueno pues bien todo esto se va a reemplazar por el 5.

343
00:31:52,230 --> 00:31:56,360
Miren qué fácil y práctico.

344
00:31:56,640 --> 00:32:01,840
Bueno entonces esto que tenías acá como anotador lo puedo borrar me queda esta última línea que la vamos

345
00:32:01,840 --> 00:32:09,240
a subir y lo último que me queda hacer lo último que me queda hacer a verlo.

346
00:32:09,300 --> 00:32:11,490
A ver pensemos dónde lo puedo hacer.

347
00:32:11,640 --> 00:32:16,200
Lo voy a hacer aquí porque esto es cierto.

348
00:32:16,260 --> 00:32:23,220
Por qué yo grabo en base de datos solo si es exitoso y porque yo no quiero modificar la ruta.

349
00:32:23,230 --> 00:32:30,660
Si el archivo realmente no se pudo grabar acá pero el mensaje Yo lo quiero devolver tanto haya sido

350
00:32:30,660 --> 00:32:33,590
exitoso o haya fallado la operación.

351
00:32:34,050 --> 00:32:39,110
Entonces por las dudas yo lo pondría a esta altura después del IF después del

352
00:32:42,800 --> 00:32:43,590
y también

353
00:32:46,640 --> 00:32:48,300
después vendría a ser esto.

354
00:32:48,310 --> 00:32:53,370
A estos se les yo lo pondría para asegurarme.

355
00:32:53,410 --> 00:32:58,900
A esta altura ya cuando se termina la función de esto yo me estoy asegurando de que el mensaje sí o

356
00:32:58,900 --> 00:33:02,260
sí siempre se devuelva.

357
00:33:02,260 --> 00:33:03,640
Voy a hacer Reston

358
00:33:07,080 --> 00:33:12,730
MSG devuelvo el mensaje a quien sea que me haya llamado diciéndole el resultado.

359
00:33:12,930 --> 00:33:18,200
Esta última llave es la que cierra la apertura de la función.

360
00:33:22,770 --> 00:33:27,950
Esta ruta la grabé manualmente para mostrárselas como quedaba una ruta adentro yo la voy a borrar.

361
00:33:27,950 --> 00:33:35,130
Ahí está bien para borrar hice doble click y lo borré simplemente hice y se editó fácil vamos a volver

362
00:33:35,130 --> 00:33:35,880
a la plataforma.

363
00:33:35,890 --> 00:33:38,110
Voy a seleccionar cualquier imagen de prueba.

364
00:33:38,280 --> 00:33:42,480
Vamos a ver qué tengo una bicicleta le voy a dar en actualizar

365
00:33:45,100 --> 00:33:47,110
bueno acá veo algo que me desconcierta.

366
00:33:47,170 --> 00:33:54,050
No tendría que haber tenido estos errores pero me encanta a compartir la verdadera programación.

367
00:33:54,060 --> 00:34:00,970
Así así así suceden estas cosas en cuanto vi el error ya que ya me di cuenta en dónde había estado mi

368
00:34:00,970 --> 00:34:11,270
falla y es que si estoy recibiendo archivos yo esta variable tiene que estar puesta de tal manera que

369
00:34:11,270 --> 00:34:18,920
sea llenada por cual fuere el archivo que llegue y que estoy filtrando con estos índices de manera incorrecta.

370
00:34:19,010 --> 00:34:26,440
Yo tengo que pasar todo lo que llega todo lo que sea que sean archivos por supuesto lo meto en esa variable.

371
00:34:26,660 --> 00:34:35,800
Ahora sí porque mire vuelvo a funciones el encargado de filtrar y buscar el archivo el NIMH es acá dentro

372
00:34:35,950 --> 00:34:42,520
de la función en sí bueno va a ser oportuno aprovechar ya que tuve un error.

373
00:34:42,520 --> 00:34:47,830
Vamos a ver si hubo error y acá me grabó algo eso está mal.

374
00:34:47,830 --> 00:34:54,580
No tendría que haber grabado nada Lehder en examinar bien no grabó nada por qué por error me quedo tranquilo.

375
00:34:54,580 --> 00:35:01,810
Bueno por las dudas vuelvo a ingresar para que desaparezca desaparezcan los errores voy a darle a seleccionar

376
00:35:02,290 --> 00:35:04,340
y voy a subirlo.

377
00:35:04,480 --> 00:35:08,410
Vamos a poner la bicicleta que no se quiso subir ahí.

378
00:35:08,410 --> 00:35:09,230
Probemos.

379
00:35:09,600 --> 00:35:17,960
Bueno no mostró nada eso es porque todavía no agregamos la impresión de la variable mensaje por aquí

380
00:35:18,500 --> 00:35:29,510
pero veamos primero si tenemos un archivo vici en nuestro ahora Berber aquí bien está vici a ver ahí

381
00:35:29,510 --> 00:35:31,640
está ya surgió nuestro servidor.

382
00:35:31,640 --> 00:35:37,790
Un buen paso un buen paso me motiva y me pone contento porque tengo la mitad del trabajo cocinado.

383
00:35:37,790 --> 00:35:44,870
Ahora cuando tenga que subir videos más o menos lo mismo ya me lo voy a hacer mi idea es buena ahora.

384
00:35:45,080 --> 00:35:46,500
Otro punto clave.

385
00:35:46,550 --> 00:35:52,160
Tengo la ruta grabada aquí le voy a dar examinar de nuevo para que se actualice y ahí está miren archivos

386
00:35:52,310 --> 00:35:59,540
barra Bize bien si todavía tengo dudas puedo venir acá.

387
00:35:59,540 --> 00:36:06,010
Curso PHP tube y ahí va a pegar la ruta archivos o Arráiz y JPG Enter.

388
00:36:06,110 --> 00:36:08,230
Y ahí tenemos la linda bicicleta.

389
00:36:08,250 --> 00:36:10,600
Bueno agradezco que me acompañarán.

390
00:36:10,760 --> 00:36:12,250
Seguimos en la próxima clase.
