sábado, 26 de agosto de 2017

martes, 22 de agosto de 2017

jueves, 10 de agosto de 2017

martes, 8 de agosto de 2017

CADENAS

OTRAS FUNCIONES PARA CADENAS DE TEXTO
PHP define numerosas funciones nativas para el manejo de cadenas de texto. Vamos a ver algunas de ellas:

FUNCIÓN
UTILIDAD
EJEMPLOS aprenderaprogramar.com
strlen($cadena)
Devuelve la longitud o número de caracteres de la cadena
Ver entregas anteriores del curso
substr ($cadena, $inicio, $opcNumCar)
Si no se especifica $opcNumCar devuelve la subcadena entre la posición $inicio y el fin de cadena siendo la posición inicial la cero. Si se especifica $opcNumCar extrae $opcNumCar caracteres desde la posición $inicio (inclusive).
Ver entregas anteriores del curso
ucfirst($cadena);
Devuelve la cadena con la primera letra en mayúsculas
$saludo = "hoy es viernes";
ucfirst($saludo);
//Hoy es viernes
ucwords($cadena);
Devuelve la cadena con cada una de sus palabras con la primera letra en mayúsculas
$saludo = "hoy es viernes";
echo ucwords($saludo);
//Hoy Es Viernes
strpos ($cadena , $subCadena, $opcPosInicio )
Devuelve la posición en que comienza la subcadena a partir de la posición inicial (cero) si no se especifica $opcPosInicio, o a partir de la posición $opcPosInicio si se especifica. Si no se encuentra la subcadena devuelve false.
$saludo = "hoy es viernes";
echo strpos($saludo, "es");
//4
trim ($cadena, $opcCaracteres)
Si no se especifica $opcCaracteres, devuelve la cadena eliminando espacios en blanco, tabuladores, saltos de línea y retornos de carro del principio y final de la cadena. Si se especifica $opcCaracteres, se eliminan los caracteres especificados.
$saludo = "*** hoy es viernes ***";
echo trim($saludo, "*");
//hoy es viernes
Nota: puede no funcionar como se espera debido a juego de caracteres, configuración local y configuración del servidor.
ltrim ($cadena, $opcCaracteres)
Si no se especifica $opcCaracteres, devuelve la cadena eliminando espacios en blanco, tabuladores, saltos de línea y retornos de carro del principio de la cadena. Si se especifica $opcCaracteres, se eliminan los caracteres especificados.
$saludo = "*** hoy es viernes ***";
echo ltrim($saludo, "*");
//hoy es viernes ***
Nota: puede no funcionar como se espera debido a juego de caracteres, configuración local y configuración del servidor.
rtrim ($cadena, $opcCaracteres)
Si no se especifica $opcCaracteres, devuelve la cadena eliminando espacios en blanco, tabuladores, saltos de línea y retornos de carro del final de la cadena. Si se especifica $opcCaracteres, se eliminan los caracteres especificados.
$saludo = "*** hoy es viernes ***";
echo rtrim($saludo, "*");
//*** hoy es viernes
Nota: puede no funcionar como se espera debido a juego de caracteres, configuración local y configuración del servidor.
chop
Igual que rtrim

str_repeat($cadena, $numVeces)
Devuelve la cadena repetida $numVeces siendo éste un número entero.
$saludo = 'hola ';
str_repeat($saludo, 3);
//hola hola hola
strstr ($cadena, $desde, $opcBoolean) 
Devuelve la subcadena desde la primera aparición de $desde (incluida) hasta el final si no se especifica opcBoolean ó este es false. Si $opcBoolean es true devuelve la subcadena desde el inicio hasta la primera aparición de $desde (excluida).
$saludo = "hoy es viernes";
echo strstr($saludo, "es", false);
//es viernes
strchr
Igual que strstr

chr ($ascii)
Devuelve el carácter correspondiente al código numérico entero $ascii según el código ascii
echo chr(65). ' es la salida';
// A es la salida


FECHA: AGOSTO 8 2017
CONCATENACIÓN

FUNCIÓN STRLEN
La función strlen obtiene la longitud de una cadena y devuelve un número entero. Es decir, obtenemos el número de caracteres que forman la cadena completa.
Escribe este código en un editor como Notepad++ y guárdalo con un nombre de archivo como ejemplo1.php. A continuación, sube el fichero al servidor y visualiza el resultado.

<?php
$cad = "cadena"; //Prueba a cambiar el texto cadena por otro
$n = strlen($cad);
echo "La longitud de la cadena es: $n";
?>

FUNCIÓN SUBSTR
La función substr devuelve una subcadena de la cadena original, es decir, una parte de la cadena original. Esta función tiene 3 parámetros:
La variable que contiene la cadena.

Número que representa la posición (inclusive) en la que comenzará a ser extraída la subcadena.

Número que indica la cantidad de caracteres que serán extraídos. Este argumento es opcional. Si se omite se tomará hasta el final de la cadena original.

Tener en cuenta que la numeración de la posición de los caracteres empieza por cero. Por ejemplo para la cadena 'GPS', que tiene 3 caracteres, el carácter en posición 0 es G, en posición 1 es P y en posición 2 es S. No existe la posición 3 debido a que se comienza a contar por el cero.
Escribe este código en un editor como Notepad++ y guárdalo con un nombre de archivo como ejemplo2.php. A continuación, sube el fichero al servidor y visualiza el resultado.

<?php
$cad = "cadena";
$sub1 = substr($cad, 2);
$sub2 = substr($cad, 2, 2);
echo "La subcadena número uno es la siguiente: $sub1 <br />";
echo "La subcadena número dos es la siguiente: $sub2";
?>

Escribe este otro ejemplo y visualízalo en tu navegador (nota: & nbsp; representa un espacio en blanco):

<?php
$cad = "aprenderaprogramar.com";
$sub1 = substr($cad, 0); //La cadena completa
$sub2 = substr($cad, 0, 8); //La subcadena aprender
$sub3 = substr($cad, 8, 1); //La subcadena a
$sub4 = substr($cad, 9); //La subcadena programar
echo "& nbsp; & nbsp; La subcadena número uno es la siguiente: $sub1 <br />";
echo "& nbsp; & nbsp; La subcadena número dos es la siguiente: $sub2 <br />";
echo "& nbsp; & nbsp; La subcadena número tres es la siguiente: $sub3 <br />";
echo "& nbsp; & nbsp;La subcadena número cuatro es la siguiente: $sub4";
?>

FECHA: AGOSTO 8 2017
VARIABLE:




Posible nombre de variable
Validez
$4variable
Nombre de variable inválido.
$_4variable
Nombre de variable válido.
$variable4
Nombre de variable válido.
$otra
Nombre de variable válido.
$1_otra
Nombre de variable inválido.
$variable_de_nombre_muy_largo
Nombre de variable válido.
$ABC
Nombre de variable válido.
$ A B C
Nombre de variable inválido.
$A_y_B_x_C
Nombre de variable válido


DIFERENCIAS ENTRE LOS OPERADORES DE ASIGNACIÓN E IGUALDAD. ASIGNACIÓN (=)
El operador de asignación es "=". Se podría pensar que es como un "igual a". No lo es. El operador igual en programación no tiene el mismo sentido que en matemáticas. En programación, significa que el valor de la expresión de la derecha se establece en el operando de la izquierda.
Fíjate en este ejemplo y en los comentarios.
<?php
$a = 3; // asignamos el valor 3 a la variable $a
$b = "cadena"; // asignamos el valor "cadena" a la variable $b

?>


OPERADOR DE IGUALDAD (==)
El operador comparador de igualdad es ==. Como su propio nombre indica, sirve para comparar dos valores o variables y no para asignar valores. Este operador devuelve el resultado de la operación lógica de 'igual a' tal y como podemos apreciar en el siguiente ejemplo.
Fíjate en este ejemplo y en los comentarios.
<?php
$a = 3;
$b = 3;
$a == $b; // El resultado de la comparación es TRUE porque $a es igual a $b
$a = 3;
$b = 4;
$a == $b; // El resultado de la comparación es FALSE porque $a no es igual a $b
?>


TIPOS DE DATOS
En PHP no es obligatorio indicar el tipo de datos al que pertenece una variable como en otros lenguajes, sino que los tipos de datos son establecidos directamente por el intérprete PHP, que es el encargado de interpretar el código.
Ahora veremos en una tabla los distintos tipos de datos que se pueden usar en PHP.
TIPO DE DATO
DEFINICIÓN
integer
Los integers, o enteros, pueden tener distintos valores numéricos enteros que se expresan con diferentes notaciones.
$variable = 18; // Número entero positivo
$variable = -18; // Número entero negativo
$variable = 0x12; // Notación hexadecimal, en principio no la utilizaremos
float o double
Este tipo de datos son los números de punto flotante a los que normalmente llamamos “números decimales”, por ejemplo, 9.876. Ambos tienen mucha precisión, pero double es el más preciso (con más decimales). La sintaxis para utilizarlos es bastante simple:
$variable = 9.876;
string
El tipo de datos string, también conocido como cadena de caracteres, se expresa con la siguiente sintaxis:
$variable = "Yo soy una cadena";
boolean
Se trata de un tipo lógico. Sus posibles valores son true (verdadero) o false (falso).
$variable = true;
$variable = false;


INSTRUCCIÓN ECHO
Esta instrucción muchas veces se dice que sirve para que se muestre por pantalla un texto, una variable, o una combinación de texto y variables. Pero realmente no es así: echo no es una instrucción que sirva para mostrar algo por pantalla (aunque podemos usarla para esto), sino que sirve para insertar texto dentro del documento HTML subyacente al código PHP.
Por ejemplo: echo "salida por pantalla. "; hará que se inserte este texto en el documento html. Si lo hacemos entre las etiquetas <body> y </body> lo veremos por pantalla porque cualquier texto insertado en ese lugar se mostrará por pantalla, no porque la instrucción echo dé lugar a que se muestre por pantalla.
Sin embargo echo "<h1>Salida por pantalla. </h1> "; no hará que se muestren por pantalla las etiquetas h1 y el texto, sino que introducirá en el documento HTML las etiquetas con el texto, éstas etiquetas funcionarán como código HTML y lo que se mostrará por pantalla será Salida por pantalla con formato de título h1 (letras más grandes de lo normal).
En general en php son válidas tanto las comillas dobles como las comillas simples, por lo que se puede escribir tanto echo "<h1>Salida por pantalla. </h1> "; como echo '<h1>Salida por pantalla. </h1>';
Los paréntesis no son necesarios (echo en realidad no es una función sino que es lo que se denomina una <<construcción del lenguaje>>, de ahí que no sean estrictamente necesarios los paréntesis), pero se pueden incluir si se desea. Ejemplo: echo ('con paréntesis y comillas simples');
Crea un archivo php con el siguiente código, ponle un nombre como usoDeEcho.php y súbelo al servidor. Luego invócalo usando la ruta adecuada según la dirección web con la que estés trabajando (será similar a http://apr2.byethost7.com/usoDeEcho.php.)
<?php
echo "salida por pantalla. ";
$a = 5;
echo $a;
echo " El valor de a es $a.";
?>


La visualización en tu navegador deberá ser similar a esta. Puede variar ligeramente dependiendo del navegador que uses.

FECHA: AGOSTO 8 2017
MANUALES INFORMÁTICA

Introducción a la programación – Pseudocódigo   http://www.aprendeaprogramar.com/course/view.php?id=22


Php para principiantes

JavaScript Operadores

APRENDE A CREAR UNA WEB DESDE CERO EN HTML

Funciones y propiedades básicas de JavaScript

Programación en html desde cero


Manual de HTML para principiantes






Introducción a la Programación con DFD: https://www.youtube.com/watch?v=xSVN-sgsXUU

MANUALES DFD:

PHP isset(): Comprobar si una variable está definida: http://www.anerbarrena.com/php-isset-4876/


Los nuevos input HTML5 para formularios: http://www.anerbarrena.com/nuevos-input-html5-3739/

Definición de pseudocódigo: http://www.alegsa.com.ar/Dic/pseudocodigo.php
Cambiar el estilo CSS de una web dinámicamente. Parte I – JavaScript: http://www.lawebera.es/como-hacer/ejemplos-css/cambiar-estilo-css-web-dinamicamente-i.php
Como dar estilos css a una caja de texto - input text y textarea: http://jquery-manual.blogspot.com.co/2013/11/como-dar-estilos-css-una-caja-de-texto.html
Tutorial CSS - Tabla de contenidos: http://es.html.net/tutorials/css/



FECHA: AGOSTO 8 2017
FORMULARIOS

Un formulario sencillo con dos campos a rellenar y un botón para enviar en HTML es de la siguiente forma:

<html> <body> <form action="formpost.php" method="post"> Nombre: <input type="text" name="nombre"><br> Email: <input type="text" name="email"><br> <input type="submit" value="Enviar"> </form> </body> </html>

Cuando un usuario rellena los datos y hace click en enviar, los datos del formulario se envían para ser procesados al archivo formpost.php. Los datos se envían a través de HTTP con el método HTTP Post.
Una vez los datos están en formpost.php pueden mostrarse, guardarse en una base de datos o lo que se necesite. En formpost.php vamos a mostrarlos con echo:

<html> <body> Hola <?php echo $_POST["nombre"]; ?><br> Tu email es: <?php echo $_POST["email"]; ?></body> </html> 

Elemento Descripción
input type="text" Caja de texto
input type="password" Caja de texto donde se muestran asteriscos en lugar de los caracteres escritos
input type="checkbox" Cajas seleccionables que permite escoger múltiples opciones
input type="radio" Cajas seleccionables en grupos que sólo permiten escoger una opción
input type="submit" Botón para enviar el formulario
input type="file" Cajas de texto y botón que permite subir archivos
input type="hidden" Elemento escondido. Especialmente útil para tokens de seguridad
option Una opción posible dentro de un elemento element
select Lista de opciones de elementos option
textarea Texto multilínea

4. Validación<h2>Formulario:</h2> <form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post"> Nombre: <input type="text" name="nombre" maxlength="50"><br> Contraseña: <input type="password" name="password"><br> Educacion: <select name="educacion"> <option value="sin-estudios">Sin estudios</option> <option value="educacion-obligatoria" selected="selected">Educación Obligatoria</option> <option value="formacion-profesional">Formación profesional</option> <option value="universidad">Universidad</option> </select> <br> Nacionalidad: <input type="radio" name="nacionalidad" value="hispana">Hispana</input> <input type="radio" name="nacionalidad" value="otra">Otra</input><br> Idiomas: <input type="checkbox" name="idiomas[]" value="español" checked="checked">Español</input> <input type="checkbox" name="idiomas[]" value="inglés">Inglés</input> <input type="checkbox" name="idiomas[]" value="francés">Francés</input> <input type="checkbox" name="idiomas[]" value="aleman">Alemán</input><br> Email: <input type="text" name="email"><br> Sitio Web: <input type="text" name="sitioweb"><br> // Botón de enviar <input type="submit" name="submit" value="Enviar"> </form> </body> </html>

Vamos a ver los aspectos más característicos:

El atributo maxlength limita el número de caracteres para una caja de texto.
Contraseña es del tipo password, lo que permite ocultar los caracteres con * cuando se escribe.
Educación es un elemento select, que permite seleccionar options en una lista. El texto en el atributo value es el que se enviará a través del formulario. El atributo selected permite mostrar el seleccionado por defecto.
Nacionalidad es del tipo radio, los elementos radio del mismo grupo han de tener un único atributo name y sólo se puede seleccionar uno.
Los idiomas están en un elemento checkbox, que permite enviar varios datos en forma de array si se indica en el atributo name con corchetes. Se puede añadir un atributo checked como seleccionado por defecto.
En action se ha puesto _<?php echo htmlespecialchars($_SERVER["PHPSELF"]); ?>. $_SERVER["PHP_SELF"] es una superglobal que devuelve el nombre del archivo en el que se encuentra el formulario, lo que hace que los datos se envíen al mismo archivo, en lugar de llevarlos a otro archivo para tratarlos. Si se emplea esta forma de indicar el archivo para action, es necesario usar la función htmlespecialchars(), que convierte caracteres especiales en entidades HTML previniendo posibles ataques Cross-site 

Primero vamos a crear un filtrado común para todos los campos con la función filtrado():

function filtrado($datos){ $datos = trim($datos); // Elimina espacios antes y después de los datos $datos = stripslashes($datos); // Elimina backslashes \ $datos = htmlspecialchars($datos); // Traduce caracteres especiales en entidades HTML return $datos;

Esta función se aplicaría a cada campo a la hora de recibir los datos:

if(isset($_POST["submit"]) && $_SERVER["REQUEST_METHOD"] == "POST"){ $nombre = filtrado($_POST["nombre"]); $password = filtrado($_POST["password"]); $educacion = filtrado($_POST["educacion"]); $nacionalidad = filtrado($_POST["nacionalidad"]); // Utilizamos implode para pasar el array a string $idiomas = filtrado(implode(", ", $_POST["idiomas"])); $email= filtrado($_POST["email"]); $sitioweb = filtrado($_POST["sitioweb"]);

Cuando un usuario rellena los datos y hace click en enviar, los datos del formulario se envían para ser procesados al archivo formpost.php. Los datos se envían a través de HTTP con el método HTTP Post.
Una vez los datos están en formpost.php pueden mostrarse, guardarse en una base de datos o lo que se necesite. En formpost.php vamos a mostrarlos con echo:

<html> <body> Hola <?php echo $_POST["nombre"]; ?><br> Tu email es: <?php echo $_POST["email"]; ?> </body> </html>

Para aceptar los datos se ha puesto _isset($POST["submit"]), que crea la key submit cuando se hace click en el botón, y _$_SERVER["REQUESTMETHOD"] == "post", que especifica que el método request ha de ser POST. Se puede usar una de las dos formas o las dos a la vez.
Para mostrar los datos:

<?php if(isset($_POST["submit"])): ?> <h2>Mostrar datos enviados</h2> Nombre : <?phpisset($nombre) ? print $nombre : ""; ?> <br> Contraseña : <?php isset($password) ? print $password: ""; ?> <br> Educación : <?php isset($educacion) ? print $educacion : ""; ?> <br> Nacionalidad : <?php isset($nacionalidad) ? print $nacionalidad : "";?> <br> Idiomas : <?php isset($idiomas) ? print $idiomas : ""; ?> <br> Email : <?php isset($email) ? print $email : ""; ?> <br> Sitio web : <?php isset($sitioweb) ? print $sitioweb : ""; ?> <br> <?php endif; ?>

Todos los campos anteriores son opcionales. La validación más básica consiste en exigir que se rellene un campo, y comprobaremos también que el email tiene un formato de email, que el sitio web es una URL correcta y que passwordtiene un mínimo de 5 caracteres. Las validaciones de formatos pueden realizarse mediante expresiones regulares o con filtros. Siempre que sea posible, es mejor utilizar los filtros de PHP.


if(isset($_POST["submit"]) && $_SERVER["REQUEST_METHOD"] == "POST"){ // El nombre y contraseña son campos obligatorios if(empty($_POST["nombre"])){ $errores[] = "El nombre es requerido"; } if(empty($_POST["password"]) || strlen($_POST["password"]) < 5){ $errores[] = "La contraseña es requerida y ha de ser mayor a 5 caracteres"; } // El email es obligatorio y ha de tener formato adecuado if(!filter_var($_POST["email"], FILTER_VALIDATE_EMAIL) || empty($_POST["email"])){ $errores[] = "No se ha indicado email o el formato no es correcto"; } // El sitio web es obligatorio y ha de tener formato adecuado if(!filter_var($_POST["sitioweb"], FILTER_VALIDATE_URL) || empty($_POST["sitioweb"])){ $errores[] = "No se ha indicado sitio web o el formato no es correcto"; } // Si el array $errores está vacío, se aceptan los datos y se asignan a variables if(empty($errores)) { $nombre = filtrado($_POST["nombre"]); $password = filtrado($_POST["password"]); $educacion = filtrado($_POST["educacion"]); $nacionalidad = filtrado($_POST["nacionalidad"]); // Utilizamos implode para pasar el array a string $idiomas = filtrado(implode(", ", $_POST["idiomas"])); $email = filtrado($_POST["email"]); $sitioweb = filtrado($_POST["sitioweb"]); } }

El array de errores $errores guarda cada uno de los errores que se registran para luego mostrarlos. Si el array tiene algún elemento, el formulario no será aceptado. Para mostrarlos podemos hacerlo así:

<ul> <?php if(isset($errores)){ foreach ($errores as $error){ echo "<li> $error </li>"; } } ?></ul> 

. Subida de archivos

Lo más laborioso a la hora de hacer un formulario que permita la subida de archivos es manejarlos y organizarlos una vez están en el servidor. Inicialmente los archivos se suben a un directorio temporal y luego se relocalizan.
Configuración en PHP para la subida de archivos:

Debe estar On la variable file_uploads en php.ini.
En php.ini también se encuentra la variable upload_tmp_dir, que indica el directorio donde se dirigirán los archivos cuando se suban. El tamaño máximo viene indicado en el mismo archivo de configuración por upload_max_filesize. Para ver estos valores se puede utilizar ini_get('upload_tmp_dir') e ini_get('upload_max_filesize'). upload_tmp_dir sólo es manipulable desde el php.ini o httpf.conf, upload_max_filesize puede también desde .htaccess o un user.ini (tienen modo PHP_INI_SYSTEM y PHP_INI_PERDIR respectivamente).
Es necesario que los permisos tanto del directorio temporal como del directorio final sean de escritura.
Para que un formulario tenga la capacidad de aceptar archivos se añade el atributo enctype="multipart/form-data" al elemento form.

De nuevo en este ejemplo pondremos todo el contenido en un archivo form2.php:

<h2>Formulario subida de archivos</h2> <html> <body> <form action="<?php echohtmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="POST" enctype="multipart/form-data"> <inputtype="hidden" name="MAX_FILE_SIZE" value="<?php echo $max_file_size; ?>" /> <input type="file"name="imagen" /> <input type="submit" name="submit" /> </form> </body> </html>

Se incluye un input del tipo hidden que limita el tamaño máximo del archivo que se puede subir (en bytes).
La información sobre un archivo subido la proporciona el array multidimensional $_FILES. Este array se crea con el keyque se indique en el input del formulario, en este caso "imagen":

$_FILES["imagen"]["name"]. Guarda el nombre original del archivo del cliente.
$_FILES["imagen"]["type"]. Guarda el MIME type del archivo.
$_FILES["imagen"]["size"]. Guarda el tamaño del archivo en bytes.
$_FILES["imagen"]["tmp_name"]. Guarda el nombre del archivo temporal.
$_FILES["imagen"]["error"]. Guarda cualquier código de error que pueda provocar la subida del archivo.

La función move_uploaded_file() mueve un archivo subido del directorio temporal al directorio que se indique.

$directorioSubida = "uploads/"; $max_file_size = "51200"; $extensionesValidas = array("jpg", "png", "gif"); if(isset($_POST["submit"]) && isset($_FILES['imagen'])){ $errores = array(); $nombreArchivo = $_FILES['imagen']['name']; $filesize = $_FILES['imagen']['size']; $directorioTemp = $_FILES['imagen']['tmp_name']; $tipoArchivo = $_FILES['imagen']['type']; $arrayArchivo = pathinfo($nombreArchivo); $extension = $arrayArchivo['extension']; // Comprobamos la extensión del archivo if(!in_array($extension, $extensionesValidas)){ $errores[] = "La extensión del archivo no es válida o no se ha subido ningún archivo"; } // Comprobamos el tamaño del archivo if($filesize > $max_file_size){ $errores[] = "La imagen debe de tener un tamaño inferior a 50 kb"; } // Comprobamos y renombramos el nombre del archivo $nombreArchivo = $arrayArchivo['filename']; $nombreArchivo = preg_replace("/[^A-Z0-9._-]/i", "_", $nombreArchivo); $nombreArchivo = $nombreArchivo . rand(1, 100); // Desplazamos el archivo si no hay errores if(empty($errores)){ $nombreCompleto = $directorioSubida.$nombreArchivo.".".$extension; move_uploaded_file($directorioTemp, $nombreCompleto); print "El archivo se ha subido correctamente"; } }

El array $_FILES['imagen']['error'] especifica por qué no se ha podido subir el archivo, lo que permite especificar un mensaje de vuelta para cada tipo de error. Devuelve un integer con el número de error:

Error Valor Significado
UPLOAD_ERR_OK 0 No hay errores
UPLOAD_ERR_INI_SIZE 1 Supera el tamaño máximo indicado en php.ini
UPLOAD_ERR_FORM_SIZE 2 Supera el tamaño máximo indicado en MAX_FILE_SIZE de html
UPLOAD_ERR_PARTIAL 3 Sólo se ha subido el archivo parcialmente
UPLOAD_ERR_NO_FILE 4 No se ha subido ningún archivo
UPLOAD_ERR_NO_TMP_DIR 6 Falta la carpeta temporal
UPLOAD_ERR_CANT_WRITE 7 No se puede escribir en el directorio especificado
UPLOAD_ERR_EXTENSION 8 Una extensión de PHP ha detenido la subida

6. Subida múltiple de archivos

Una subida múltiple de archivos en PHP en la práctica se hace normalmente con ayuda de JavaScript. Una buena librería para subir archivos es DropzoneJS
En el formulario HTML lo único que cambia es que se añade un atributo multiple y que en el atributo name del input file se añade corchetes para indicar que es un array:

<input type="file" name="imagenes[]" multiple="multiple" />

En cuanto al backend, omitiendo validaciones esta puede ser una forma de hacerlo:

$directorioSubida = "uploads/"; $max_file_size = "51200"; if(isset($_POST["submit"]) && isset($_FILES['imagenes'])){ $nombres = $_FILES['imagenes']['name']; $temporales = $_FILES['imagenes']['tmp_name']; $tipos = $_FILES['imagenes']['type']; $errores = $_FILES['imagenes']['error']; // Iteramos sobre los arrays creados for ($i = 0; $i < count($temporales); $i++){ if(move_uploaded_file($temporales[$i], $directorioSubida.$nombres[$i])){ echo "Se ha subido {$nombres[$i]} correctamente <br>"; } else { echo "Ha habido algún error al subir algún archivo"; } } }

https://diego.com.es/formularios-en-php

FECHA: AGOSTO 8 2017