validar - subir multiples archivos php mysql
Carga de archivos mĂșltiples en php (13)
Quiero cargar varios archivos y almacenarlos en una carpeta, obtener la ruta y almacenarla en la base de datos ... Cualquier buen ejemplo que buscó al cargar varios archivos ...
Nota: Los archivos pueden ser de cualquier tipo ...
Acabo de encontrar la siguiente solución:
http://www.mydailyhacks.org/2014/11/05/php-multifile-uploader-for-php-5-4-5-5/
es un script de carga de archivos múltiples PHP listo con un formulario donde puede agregar múltiples entradas y una barra de progreso AJAX. Debería funcionar directamente después de desempacar en el servidor ...
Aquí hay una función que escribí que devuelve una matriz $_FILES
más comprensible.
function getMultiple_FILES() {
$_FILE = array();
foreach($_FILES as $name => $file) {
foreach($file as $property => $keys) {
foreach($keys as $key => $value) {
$_FILE[$name][$key][$property] = $value;
}
}
}
return $_FILE;
}
Buen enlace en:
La carga de un solo archivo PHP con una explicación básica variada .
Cargar archivo PHP con la Validación
Carga múltiple de archivos PHP con validación Haga clic aquí para descargar el código fuente
extract($_POST);
$error=array();
$extension=array("jpeg","jpg","png","gif");
foreach($_FILES["files"]["tmp_name"] as $key=>$tmp_name)
{
$file_name=$_FILES["files"]["name"][$key];
$file_tmp=$_FILES["files"]["tmp_name"][$key];
$ext=pathinfo($file_name,PATHINFO_EXTENSION);
if(in_array($ext,$extension))
{
if(!file_exists("photo_gallery/".$txtGalleryName."/".$file_name))
{
move_uploaded_file($file_tmp=$_FILES["files"]["tmp_name"][$key],"photo_gallery/".$txtGalleryName."/".$file_name);
}
else
{
$filename=basename($file_name,$ext);
$newFileName=$filename.time().".".$ext;
move_uploaded_file($file_tmp=$_FILES["files"]["tmp_name"][$key],"photo_gallery/".$txtGalleryName."/".$newFileName);
}
}
else
{
array_push($error,"$file_name, ");
}
}
y debes verificar tu código HTML
<form action="create_photo_gallery.php" method="post" enctype="multipart/form-data">
<table width="100%">
<tr>
<td>Select Photo (one or multiple):</td>
<td><input type="file" name="files[]" multiple/></td>
</tr>
<tr>
<td colspan="2" align="center">Note: Supported image format: .jpeg, .jpg, .png, .gif</td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" value="Create Gallery" id="selectedButton"/></td>
</tr>
</table>
</form>
Buen enlace en:
La carga de un solo archivo PHP con una explicación básica variada .
Cargar archivo PHP con la Validación
Carga múltiple de archivos PHP con validación Haga clic aquí para descargar el código fuente
Ejecuto el bucle Foreach con elemento de error, se parece a
foreach($_FILES[''userfile''][''error''] as $k=>$v)
{
$uploadfile = ''uploads/''. basename($_FILES[''userfile''][''name''][$k]);
if (move_uploaded_file($_FILES[''userfile''][''tmp_name''][$k], $uploadfile))
{
echo "File : ", $_FILES[''userfile''][''name''][$k] ," is valid, and was successfully uploaded./n";
}
else
{
echo "Possible file : ", $_FILES[''userfile''][''name''][$k], " upload attack!/n";
}
}
Múltiples archivos pueden ser seleccionados y luego cargados usando el
<input type=''file'' name=''file[]'' multiple>
El script de ejemplo php que realiza la carga:
<html>
<title>Upload</title>
<?php
session_start();
$target=$_POST[''directory''];
if($target[strlen($target)-1]!=''/'')
$target=$target.''/'';
$count=0;
foreach ($_FILES[''file''][''name''] as $filename)
{
$temp=$target;
$tmp=$_FILES[''file''][''tmp_name''][$count];
$count=$count + 1;
$temp=$temp.basename($filename);
move_uploaded_file($tmp,$temp);
$temp='''';
$tmp='''';
}
header("location:../../views/upload.php");
?>
</html>
Los archivos seleccionados se reciben como una matriz con
$_FILES[''file''][''name''][0]
almacenando el nombre del primer archivo.
$_FILES[''file''][''name''][1]
almacenando el nombre del segundo archivo.
y así.
No es tan diferente de cargar un archivo - $_FILES
es una matriz que contiene todos los archivos cargados.
Hay un capítulo en el manual de PHP: carga de múltiples archivos
Si desea habilitar múltiples cargas de archivos con una fácil selección al final del usuario (seleccionando múltiples archivos a la vez en lugar de completar los campos de carga) eche un vistazo a SWFUpload . Sin embargo, funciona de forma diferente a un formulario normal de carga de archivos y requiere Flash para funcionar. SWFUpload se ha quedado obsoleto junto con Flash. Verifique las otras respuestas más nuevas para el enfoque ahora correcto.
Podemos facilitar la carga de múltiples archivos utilizando php utilizando el siguiente script.
Descargue el código fuente completo y vista previa
<?php
if (isset($_POST[''submit''])) {
$j = 0; //Variable for indexing uploaded image
$target_path = "uploads/"; //Declaring Path for uploaded images
for ($i = 0; $i < count($_FILES[''file''][''name'']); $i++) {//loop to get individual element from the array
$validextensions = array("jpeg", "jpg", "png"); //Extensions which are allowed
$ext = explode(''.'', basename($_FILES[''file''][''name''][$i]));//explode file name from dot(.)
$file_extension = end($ext); //store extensions in the variable
$target_path = $target_path . md5(uniqid()) . "." . $ext[count($ext) - 1];//set the target path with a new name of image
$j = $j + 1;//increment the number of uploaded images according to the files in array
if (($_FILES["file"]["size"][$i] < 100000) //Approx. 100kb files can be uploaded.
&& in_array($file_extension, $validextensions)) {
if (move_uploaded_file($_FILES[''file''][''tmp_name''][$i], $target_path)) {//if file moved to uploads folder
echo $j. '').<span id="noerror">Image uploaded successfully!.</span><br/><br/>'';
} else {//if file was not moved.
echo $j. '').<span id="error">please try again!.</span><br/><br/>'';
}
} else {//if file size and file type was incorrect.
echo $j. '').<span id="error">***Invalid file Size or Type***</span><br/><br/>'';
}
}
}
?>
Sé que esta es una publicación anterior, pero algunas explicaciones adicionales pueden ser útiles para alguien que intenta cargar varios archivos ... Esto es lo que debe hacer:
- El nombre de entrada debe definirse como una matriz, es decir,
name="inputName[]"
- El elemento de entrada debe tener
multiple="multiple"
o solomultiple
- En su archivo PHP use la sintaxis
"$_FILES[''inputName''][''param''][index]"
- Asegúrese de buscar nombres de archivos vacíos y rutas , la matriz puede contener cadenas vacías . Use
array_filter()
antes de contar.
Aquí hay un ejemplo oscuro y sucio (que muestra solo el código relevante)
HTML:
<input name="upload[]" type="file" multiple="multiple" />
PHP:
//$files = array_filter($_FILES[''upload''][''name'']); //something like that to be used before processing files.
// Count # of uploaded files in array
$total = count($_FILES[''upload''][''name'']);
// Loop through each file
for( $i=0 ; $i < $total ; $i++ ) {
//Get the temp file path
$tmpFilePath = $_FILES[''upload''][''tmp_name''][$i];
//Make sure we have a file path
if ($tmpFilePath != ""){
//Setup our new file path
$newFilePath = "./uploadFiles/" . $_FILES[''upload''][''name''][$i];
//Upload the file into the temp dir
if(move_uploaded_file($tmpFilePath, $newFilePath)) {
//Handle other code here
}
}
}
Espero que esto ayude!
Simple es eso, simplemente cuente primero la matriz de archivos, luego en el ciclo while puede hacer esto fácilmente como
$count = count($_FILES{''item_file''][''name'']);
ahora tienes el número total de archivos correctos.
En while loop haz esto:
$i = 0;
while($i<$count)
{
Upload one by one like we do normally
$i++;
}
este simple script funcionó para mí.
<?php
foreach($_FILES as $file){
//echo $file[''name''];
echo $file[''tmp_name''].''</br>'';
move_uploaded_file($file[''tmp_name''], "./uploads/".$file["name"]);
}
?>
HTML
crear div con
id=''dvFile''
;crear un
button
;onclick
de esa función de llamada de botónadd_more()
JavaScript
function add_more() {
var txt = "<br><input type=/"file/" name=/"item_file[]/">";
document.getElementById("dvFile").innerHTML += txt;
}
PHP
if(count($_FILES["item_file"][''name''])>0)
{
//check if any file uploaded
$GLOBALS[''msg''] = ""; //initiate the global message
for($j=0; $j < count($_FILES["item_file"][''name'']); $j++)
{ //loop the uploaded file array
$filen = $_FILES["item_file"][''name'']["$j"]; //file name
$path = ''uploads/''.$filen; //generate the destination path
if(move_uploaded_file($_FILES["item_file"][''tmp_name'']["$j"],$path))
{
//upload the file
$GLOBALS[''msg''] .= "File# ".($j+1)." ($filen) uploaded successfully<br>";
//Success message
}
}
}
else {
$GLOBALS[''msg''] = "No files found to upload"; //No file upload message
}
De esta forma, puede agregar archivos / imágenes, tantos como sea necesario, y manejarlos a través del script php.
$property_images = $_FILES[''property_images''][''name''];
if(!empty($property_images))
{
for($up=0;$up<count($property_images);$up++)
{
move_uploaded_file($_FILES[''property_images''][''tmp_name''][$up],''../images/property_images/''.$_FILES[''property_images''][''name''][$up]);
}
}
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>
<body>
<?php
$max_no_img=4; // Maximum number of images value to be set here
echo "<form method=post action='''' enctype=''multipart/form-data''>";
echo "<table border=''0'' width=''400'' cellspacing=''0'' cellpadding=''0'' align=center>";
for($i=1; $i<=$max_no_img; $i++){
echo "<tr><td>Images $i</td><td>
<input type=file name=''images[]'' class=''bginput''></td></tr>";
}
echo "<tr><td colspan=2 align=center><input type=submit value=''Add Image''></td></tr>";
echo "</form> </table>";
while(list($key,$value) = each($_FILES[''images''][''name'']))
{
//echo $key;
//echo "<br>";
//echo $value;
//echo "<br>";
if(!empty($value)){ // this will check if any blank field is entered
$filename =rand(1,100000).$value; // filename stores the value
$filename=str_replace(" ","_",$filename);// Add _ inplace of blank space in file name, you can remove this line
$add = "upload/$filename"; // upload directory path is set
//echo $_FILES[''images''][''type''][$key]; // uncomment this line if you want to display the file type
//echo "<br>"; // Display a line break
copy($_FILES[''images''][''tmp_name''][$key], $add);
echo $add;
// upload the file to the server
chmod("$add",0777); // set permission to the file.
}
}
?>
</body>
</html>