subir multiple files php-mysql

Murd0ck

He estado mirando y remirando por google, foros etc.. y no encuentro la solución viable a lo que yo quiero hacer, el tema es tengo un formulario dónde añado diferentes campos ya sea nombre, artista, medidas
foto_antes y foto_despues hasta aqui todo bien, en php consigo hacer un upload de la primera foto se guarde el nombre en la DB y la subo a una carpeta al servidor pero como subo 2 imagenes o más?

posteo el codigo

if(isset($_POST['upload']) && isset($_FILE['foto']) == '') 
{ 

// define the posted file into variables 
$name = $_FILES['foto']['name']; 
$tmp_name = $_FILES['foto']['tmp_name']; 
$type = $_FILES['foto']['type']; 
$size = $_FILES['foto']['size']; 

// if your server has magic quotes turned off, add slashes manually 
if(!get_magic_quotes_gpc()){ 
$name = addslashes($name); 
} 

// open up the file and extract the data/content from it 
$extract = fopen($tmp_name, 'r'); 
$contenido = fread($extract, $size); 
$content = addslashes($contenido); 
fclose($extract); 
	

	$query="INSERT INTO restauracion (artista ,titulo ,medidas ,tecnica , imagen_antes ,imagen_despues,restauracion ,responsable ,deadline, c_report, info ,enmarcacion ,e_resp, e_deadline ) VALUES ('".$_REQUEST['artista']."','".$_REQUEST['titulo']."','".$_REQUEST['medidas']."','".$_REQUEST['tecnica']."','$name','$name2
        ','".$_REQUEST['restauracion']."','".$_REQUEST['responsable']."','".$_REQUEST['deadline']."','".$_REQUEST['c_report']."','".$_REQUEST['info']."','".$_REQUEST['enmarcacion']."','".$_REQUEST['e_resp']."','".$_REQUEST['e_deadline']."')";
	$results = mysql_query($query);
    //echo $results;

if(!empty($_FILES)) 
    { 
        $target = "../imagenes/"; 
        $target = $target . basename( $_FILES['foto']['name']);
        $ok=1; 
        $picture_size = $_FILES['foto']['size']; 
        $picture_type=$_FILES['foto']['type'];  
//This is our size condition if ($picture_size > 1000000000) { echo "Your file is too large.<br>"; $ok=0; } //This is our limit file type condition if ($picture_type =="text/php") { echo "No PHP files<br>"; $ok=0; } //Here we check that $ok was not set to 0 by an error if ($ok==0) { Echo "Sorry your file was not uploaded"; } //If everything is ok we try to upload it else { if(move_uploaded_file($_FILES['foto']['tmp_name'], $target)) { echo "The file ". basename( $_FILES['foto']['name']). " has been uploaded <br/>"; } else { echo "Sorry, there was a problem uploading your file."; } } } mysql_close(); echo "";
} else { header("Location: restauracion.html"); die("Debes de subir una foto"); } ?>

He ido haciendo pruebas con arrays pero no lo consigo .. necesito vuestra sabia ayuda!

gracias :)

Merkury

No habrás llamado en html a todas 'foto'...

xMarston

Por lo que veo en el código o lo que he llegado a enteneder, solo subes una imagen.

¿Tu formulario tiene diferentes input del tipo file?

2 respuestas
Merkury

#3 Yo viendo solo el php apostaría a que a llamado a todos los inputs de file 'foto', amen de que luego en el PHP no esta iterando el vector...

Murd0ck

En el html tengo

<div class="span4">
    <legend><a href="#" class="boton2">IMÁGENES</a></legend>
     <div id="desplegable2" style="display: none;">
    <label>Imagen Antes</label>
    <input name="MAX_FILE_SIZE" value="4194304000" type="hidden">
    <input type="file" name="foto" id="foto">
    <label>Imagen Después</label>
    <input type="file"  name="foto_2" id="foto_2">
</div>    					
</div>

he probado haciendo con arrays y mismo resultado, lo que he conseguido que me guarde el nombre en la base de datos pero al hacer un move_uploaded_file solo me mueve el primer archivo.

#3 si en este formulario hay 2 inputs files y en otros formularios que estoy haciendo habrán entre 4-5 inputs files mas.

1 respuesta
Merkury

#5 http://php.net/manual/en/features.file-upload.multiple.php

1 respuesta
Murd0ck

#6 ya me estuve mirando toda la documentación y lo que hace al insertar es:

id:1 foto:1
id:2 foto:2

y no es lo que quiero yo quiero:

id:1 foto:1 foto:2
id:2 foto:1 foto:2

debo ser un negado al no ver la forma de hacerlo correcto -.-

1 respuesta
Merkury

#7 A ver $FILES[] por si mismo es un vector, para mover varios ficheros has de acceder con $FILES[][]

En la documentación hay ejemplos y funciones, miratelos otra vez, porque si las has mirado y no te funcionan algo estas haciendo mal.

Murd0ck

#7 vale muchas gracias, volveré a mirarmelo a ver si lo consigo :)

Usuarios habituales

  • Murd0ck
  • Merkury
  • xMarston