Foros del Web » Programando para Internet » PHP »

Subir 4 imágenes a la vez vía post - multipart/form-data

Estas en el tema de Subir 4 imágenes a la vez vía post - multipart/form-data en el foro de PHP en Foros del Web. Hola amigos, me gustaría me puedan ayudar con este problemilla: - Necesito grabar en mi BD MySql 4 imágenes a la vez (.gif, .jpg, .png, ...
  #1 (permalink)  
Antiguo 05/05/2004, 23:02
 
Fecha de Ingreso: abril-2004
Ubicación: Santiago
Mensajes: 10
Antigüedad: 20 años
Puntos: 0
Subir 4 imágenes a la vez vía post - multipart/form-data

Hola amigos, me gustaría me puedan ayudar con este problemilla:
- Necesito grabar en mi BD MySql 4 imágenes a la vez (.gif, .jpg, .png, swf(si se puede)) vía formulario (post y enctype="multipart/form-data") pero sólo logro subir de a una, mi código es:

Formulario:

<form action="graba_imagen.php" method="POST" enctype="multipart/form-data">
<input type="file" name="mon_image" >
<input type="submit" name="submitButtonName" value="Grabar imagen!!"
</form>

El PHP "graba_imagen.php" que recibe y graba en la BD es:

<?
if ( "image/pjpeg" == $mon_image_type )
$extension = ".jpg";
else
$extension = ".gif";

if ($mon_image) copy($mon_image,"imagenes/".$mon_image_name);
$image = "$mon_image_name";

$sql ="INSERT INTO misfotos VALUES (foto='$image')";
$result = mysql_query($sql);
?>


Los parámetros de la BD está, debidamente configurados en un PHP aparte: include("bd.php");

Gracias por vuestra posible ayuda,

Atte,

desde Chile,


Guillermo Meza
  #2 (permalink)  
Antiguo 05/05/2004, 23:07
Avatar de lado2mx
Colaborador
 
Fecha de Ingreso: agosto-2001
Ubicación: Veracruz
Mensajes: 3.720
Antigüedad: 22 años, 8 meses
Puntos: 9
No te recomiendo que lo subas a la base de datos, será mejor que uses un sistema de directorio, con el CHMOD en 777, de ahí puedes subir al mismo tiempo todos los archivos que quieras, y tu base de datos no queda tan recargada.
  #3 (permalink)  
Antiguo 06/05/2004, 06:17
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Te recomiendo usar los arrays superglobales $_FILES en lugar de usar como globales las variables que contienen el archivo (y en general todas).

Lee la documentación oficial sobre el tema:
http://us2.php.net/manual/en/features.file-upload.php

(En Las FAQ's de este foro tienes ejemplos de subir múltiples archivos también.)

Un saludo,

lado2mx .. no deja los archivos en la BD como campo binario .. (usa el copy() para mover el archivo .. en la BD sólo guarda la referencia del nombre del archivo).
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #4 (permalink)  
Antiguo 06/05/2004, 18:23
 
Fecha de Ingreso: abril-2004
Ubicación: Santiago
Mensajes: 10
Antigüedad: 20 años
Puntos: 0
Ok, comprendo pero pasa esto !!!

Mira tengo este problemilla con el script:

Quiero subir 4 images de una ves (en un solo form), pero me deja solo una, pues la variables globales de php, trabajan con el input file "userfile" (no lo puedo cambiar), que agrego para que reconozca los otros input???:

El form es este:

<form action="sube_imagen.php" method="post" enctype="multipart/form-data">
<input type="hidden" name="MAX_FILE_SIZE" value="100000">
<input name="userfile" type="file">
<input name="userfile" type="file">
<input name="userfile" type="file">
<input name="userfile type="file">
<input type="submit" value="Enviar">
</form>

Y el PHP este:


<?php
//datos del arhivo
$nombre_archivo = $HTTP_POST_FILES['userfile']['name'];
$tipo_archivo = $HTTP_POST_FILES['userfile']['type'];
$tamano_archivo = $HTTP_POST_FILES['userfile']['size'];
//compruebo si las características del archivo son las que deseo
if (!((strpos($tipo_archivo, "gif") || strpos($tipo_archivo, "jpeg")) && ($tamano_archivo < 100000))) {
echo "La extensión o el tamaño de los archivos no es correcta. <br><br><table><tr><td><li>Se permiten archivos .gif o .jpg<br><li>se permiten archivos de 100 Kb máximo.</td></tr></table>";
}else{
if (move_uploaded_file($HTTP_POST_FILES['userfile']['tmp_name'], "<---la ruta ----->/$nombre_archivo")){
echo "El archivo ha sido cargado correctamente.";
}else{
echo "Ocurrió algún error al subir el fichero. No pudo guardarse.";
}
}
?>

Funciona bién, pero de las 4 imagenes seleccionadas, manda solo una y la guarda en directorio "archivos"= <---la ruta ----->////


------ Luego de aprobado lo anterior veo como registro y hago el enlace con el campo de la BD correspondiente y tabla , en eso no hay problema !!!----------

Puajjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj

Última edición por gmeza2004; 06/05/2004 a las 20:58
  #5 (permalink)  
Antiguo 07/05/2004, 02:22
 
Fecha de Ingreso: mayo-2004
Ubicación: españa
Mensajes: 8
Antigüedad: 19 años, 11 meses
Puntos: 0
pero no le pongas de nombre userfile hombre...
ponles un nombre distinto a cada una y que no sea user file


aqui yo subo dos:


Debemos comenzar creando la base de datos y la tabla
que almacenara el codigo de la foto, el thumbail y
la foto en si

create database fotos;
create table fotos.foto_foto(
idfoto int not null auto_increment primary KEY,
foto_grande mediumblob,
foto_pequena mediumblob,
);

///datos.php(pagina de configuracion)

<?php
$servidor="";
$nombre="";
$clave="";
?>


Ahora creamos un simple formulario que coja de nuestro
ordenador el thumbail y la foto(deben estar previamente
guardadas con el tamaño adecuado)
observar elType del formulario, esto nos permite enviar
tanto texto como ficheros

///form.php

<?
echo '<font size=1>';
echo '<center>';
echo'<form enctype="multipart/form-data" action="guardararchivo.php" method="post">';
echo 'Foto<br><input type="file" name="foto">';
echo '<br><br>';
echo 'Thum.<br><input type="file" name="thumbail"><br><br>';
echo '<input type=hidden name=max_file_size value=1000000>';
echo '<input type="submit" value="Enviar archivo">';
echo '</form>';
echo '<br><br><a href=descargar_archivo2.php>Ver album</a>';
?>

Esta es la pagina que guarda las fotos en la base de datos, da un mensaje de
error o de exito y nos devuelve al formulario, es muy sencilla

///guardadararchivo.php

<?php
require ("datos.php");
echo '<center><font size=1>';
$conexion=@mysql_connect($servidor,$nombre,$clave) ;
$res=mysql_select_db("fotos",$conexion);
if ( $conexion > 0 )
{

$archivo = $_FILES["foto"]["tmp_name"];
$tamanio = $_FILES["foto"]["size"];
$tipo = $_FILES["foto"]["type"];
$nombre = $_FILES["foto"]["name"];
$archivo_thumb = $_FILES["thumbail"]["tmp_name"];
$tamanio_thumb = $_FILES["thumbail"]["size"];
$tipo_thumb = $_FILES["thumbail"]["type"];
$nombre_thumb = $_FILES["thumbail"]["name"];
if ( $archivo != "none" && $archivo_thumb!="none")
{
$fp = fopen($archivo, "rb");
$contenido = fread($fp,$tamanio);
$contenido = addslashes($contenido);
fclose($fp);
$fp_thumb = fopen($archivo_thumb, "rb");
$contenido_thumb = fread($fp_thumb,$tamanio_thumb);
$contenido_thumb = addslashes($contenido_thumb);
fclose($fp_thumb);
$query = "INSERT INTO fotos.foto_foto VALUES(null,'".$contenido."','".$contenido_thumb." ')";
mysql_query($query);
if(mysql_affected_rows($conexion) > 0)print "Se ha guardado el archivo en la base de datos.";
else print "NO se ha podido guardar el archivo en la base de datos.";
}
else print "No se ha podido subir el archivo al servidor";
}else{
echo 'No conectado';
}
echo "<HTML><SCRIPT>document.location='form.php';</SCRIPT></HTML>";
?>


A continuacion muestro como se puede crear un album de fotos con enlace a esa misma foto
mas grande, la pequeña es el thumbail que hemos guardado con tamaño mas pequeño y la
grande tambien la tenemos en la bas de datos(recomiendo comprimir mediante codigo con
gzip)aqui no las comprimo porque se complica un poco el script.


///descargar_archivo2.php

<?php
require ("datos.php");
$conexion=@mysql_connect($servidor,$nombre,$clave) ;
$res=mysql_select_db("fotos",$conexion);

$qry = "SELECT idfoto,foto_pequena FROM fotos.foto_foto";
$res2 = mysql_query($qry);
for ($j=0;$j < mysql_num_rows($res2);$j++)
for ($i=0;$i < mysql_num_fields($res2);$i++)
{
$foto=basename(tempnam(getcwd(),'tmp'));
$foto.=".jpg";
if ($i==1)
{
$contenido2=mysql_result($res2,$j,$i);
$ft=fopen($foto,"w");
fwrite($ft,$contenido2);
fclose($ft);
echo '<a href=fotogrande.php?idfoto='.mysql_result($res2,$j ,0).'><img src='.$foto.'>&nbsp;&nbsp;&nbsp;';
echo '';
}
}
echo '<br><br><font size=1><center><a href=form.php>Insertar nuevas fotos</a>';
?>


y finalmente creamos la pàgina donde visualizamos las fotos en grande
sencillo, no?

///fotogrande.php

<?php
require("datos.php");
$conexion=@mysql_connect($servidor,$nombre,$clave) ;
$res=mysql_select_db("fotos",$conexion);
$qry = "SELECT foto_grande FROM fotos.foto_foto where idfoto='".$_GET["idfoto"]."'";
$res2 = mysql_query($qry);
$foto=basename(tempnam(getcwd(),'tmp'));
$foto.=".jpg";
$contenido2=mysql_result($res2,0,0);
$ft=fopen($foto,"w");
fwrite($ft,$contenido2);
fclose($ft);
echo '<center><img src='.$foto.'>&nbsp;&nbsp;&nbsp;<br><br>';
echo '<font size=1><a href=descargar_archivo2.php>Volver al album</a>';
?>
  #6 (permalink)  
Antiguo 07/05/2004, 06:56
 
Fecha de Ingreso: abril-2004
Ubicación: Santiago
Mensajes: 10
Antigüedad: 20 años
Puntos: 0
Okias !!!

Ahora sí, muchas gracias por tu ayuda, saludos desde Chile. !!!
  #7 (permalink)  
Antiguo 07/05/2004, 07:00
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
gmeza2004

Si pretendes subir multiples archivos a la vez .. tus nombres de los files (campos del formulario) tienen que ser arrays:

Código PHP:
<input name="userfile[]" type="file">
<
input name="userfile[]" type="file">
<
input name="userfile[]" type="file">
<
input name="userfile[]" type="file">
<
input type="submit" value="Enviar"
Y en PHP los obtendras en un array BIDIMENSIONAL! que tendrás que recorrer en un bucle .. sea un for() o un foreach()

Código PHP:
for ($x$x<=count($HTTP_POST_FILES['userfile']); $x++){
    
$nombre_archivo $HTTP_POST_FILES['userfile']['name'][$x]; 
    
$tipo_archivo $HTTP_POST_FILES['userfile']['type'][$x]; 
    
// etc ...

Todo esto lo detalla y con ejemplos el manual oficial de PHP en el link que dejé. ¿alguien lo leyò?

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #8 (permalink)  
Antiguo 07/05/2004, 07:18
 
Fecha de Ingreso: abril-2004
Ubicación: Santiago
Mensajes: 10
Antigüedad: 20 años
Puntos: 0
Ok, lo voy a leer detalladamente !!!

Si bién el ejemplo anterior funciona ( y agradecido por el ejemplo), imagino que esta es una forma más técnica pero mas simplificada, cuestión de no tener que asignar los datos a cada imagen o file para diferenciarlas, imagino, ¿que pasaría? si fueran mas...

Muchas gracias,

Saludos,

Guillermo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 19:54.