Foros del Web » Programando para Internet » PHP »

[Upload multiple] Ayuda subiendo imagenes por bd ...

Estas en el tema de [Upload multiple] Ayuda subiendo imagenes por bd ... en el foro de PHP en Foros del Web. Hola amigos, estoy haciendo un sistema de noticias pero quiero subir mas de 2 imagenes. Las meto a la base de datos mediante la siguiente ...
  #1 (permalink)  
Antiguo 13/06/2005, 16:41
 
Fecha de Ingreso: diciembre-2003
Ubicación: Campehce, Mexico
Mensajes: 325
Antigüedad: 14 años
Puntos: 0
[Upload multiple] Ayuda subiendo imagenes por bd ...

Hola amigos, estoy haciendo un sistema de noticias pero quiero subir mas de 2 imagenes. Las meto a la base de datos mediante la siguiente forma:

Código PHP:
$binario_nombre_temporal=$_FILES['archivo']['tmp_name'];
$binario_contenido addslashes(fread(fopen($binario_nombre_temporal"rb"), filesize($binario_nombre_temporal)));
$binario_tipo=$_FILES['archivo']['type'];

"INSERT INTO noticias (id,imagen,tipo) VALUES ('','$binario_contenido','$binario_tipo')"

El propblema viene que si por ejemplo (hay 5 campos para hacer upload) si solo se requieren dos imagenes para subir, me da errores de fread, debido a que no se subieron esas imagens.

Como puedo impedir a que me salga ese error ??
O que solucion puedo darle ???
  #2 (permalink)  
Antiguo 14/06/2005, 01:08
 
Fecha de Ingreso: enero-2004
Ubicación: Salto
Mensajes: 484
Antigüedad: 13 años, 11 meses
Puntos: 2
Puedes utilizar empty() antes o isset() para saber q variables vienen con datos y cuales no. Luego si quieres puedes usar unset() para destruir las variables q vengan vacías.
http://ar2.php.net/manual/es/function.empty.php
http://ar2.php.net/manual/es/function.isset.php
http://ar2.php.net/manual/es/function.unset.php

Saludos cuidate
__________________
Dios dira que esto no es justo, pero lo sera...
  #3 (permalink)  
Antiguo 14/06/2005, 15:21
 
Fecha de Ingreso: diciembre-2003
Ubicación: Campehce, Mexico
Mensajes: 325
Antigüedad: 14 años
Puntos: 0
Si asi es, pero no busco como plantearlo por todo, aqui tienes el codigo para que veas.

Código PHP:
<?
include("conexion.php");
$binario_nombre_temporal $_FILES['archivo']['tmp_name'];
$binario_contenido addslashes(fread(fopen($binario_nombre_temporal"rb"), filesize($binario_nombre_temporal)));
$binario_tipo=$_FILES['archivo']['type'];

$binario_nombre_temporal1 $_FILES['archivo1']['tmp_name'];
$binario_contenido1 addslashes(fread(fopen($binario_nombre_temporal1"rb"), filesize($binario_nombre_temporal1)));
$binario_tipo1 $_FILES['archivo1']['type'];

$binario_nombre_temporal2 $_FILES['archivo2']['tmp_name'];
$binario_contenido2 addslashes(fread(fopen($binario_nombre_temporal2"rb"), filesize($binario_nombre_temporal2)));
$binario_tipo2 $_FILES['archivo2']['type'];

$binario_nombre_temporal3 $_FILES['archivo3']['tmp_name'];
$binario_contenido3 addslashes(fread(fopen($binario_nombre_temporal3"rb"), filesize($binario_nombre_temporal3)));
$binario_tipo3 $_FILES['archivo3']['type'];

$binario_nombre_temporal4 $_FILES['archivo4']['tmp_name'];
$binario_contenido4 addslashes(fread(fopen($binario_nombre_temporal4"rb"), filesize($binario_nombre_temporal4)));
$binario_tipo4 $_FILES['archivo4']['type'];

$binario_nombre_temporal5 $_FILES['archivo5']['tmp_name'];
$binario_contenido5 addslashes(fread(fopen($binario_nombre_temporal5"rb"), filesize($binario_nombre_temporal5)));
$binario_tipo5 $_FILES['archivo5']['type'];

$binario_nombre_temporal6 $_FILES['archivo6']['tmp_name'];
$binario_contenido6 addslashes(fread(fopen($binario_nombre_temporal6"rb"), filesize($binario_nombre_temporal6)));
$binario_tipo6 $_FILES['archivo6']['type'];

$binario_nombre_temporal7 $_FILES['archivo7']['tmp_name'];
$binario_contenido7 addslashes(fread(fopen($binario_nombre_temporal7"rb"), filesize($binario_nombre_temporal7)));
$binario_tipo7 $_FILES['archivo7']['type'];

$binario_nombre_temporal8 $_FILES['archivo8']['tmp_name'];
$binario_contenido8 addslashes(fread(fopen($binario_nombre_temporal8"rb"), filesize($binario_nombre_temporal8)));
$binario_tipo8 $_FILES['archivo8']['type'];

$binario_nombre_temporal9 $_FILES['archivo9']['tmp_name'];
$binario_contenido9 addslashes(fread(fopen($binario_nombre_temporal9"rb"), filesize($binario_nombre_temporal9)));
$binario_tipo9 $_FILES['archivo9']['type'];

$sql "INSERT INTO noticias (id,titulo,noticia,imagen,tipo,imagen1,tipo1,imagen2,tipo2,imagen3,tipo3,imagen4,tipo4,imagen5,tipo5,imagen6,tipo6,imagen7,tipo7,imagen8,tipo8,imagen9,tipo9) VALUES ('','$titulo','$noticia','$binario_contenido','$binario_tipo','$binario_contenido1','$binario_tipo1','$binario_contenido2','$binario_tipo2','$binario_contenido3','$binario_tipo3','$binario_contenido4','$binario_tipo4','$binario_contenido5','$binario_tipo5','$binario_contenido6','$binario_tipo6','$binario_contenido7','$binario_tipo7','$binario_contenido8','$binario_tipo8','$binario_contenido9','$binario_tipo9')";
mysql_query($sql);
echo 
"<p>&nbsp;
<center><b><font face='Tahoma' style='font-size: 8pt' color='#FF0000'>Anuncio Agregado !!</font></b></center>"
;
?>
Espero alguien me pueda ayudar ::
  #4 (permalink)  
Antiguo 15/06/2005, 02:59
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 13 años, 4 meses
Puntos: 101
Lo que te dijeron... no lo plantees por todo sino a cada proceso... ¿por qué o haces un ciclo???

__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #5 (permalink)  
Antiguo 16/06/2005, 14:31
 
Fecha de Ingreso: diciembre-2003
Ubicación: Campehce, Mexico
Mensajes: 325
Antigüedad: 14 años
Puntos: 0
Pues sinceramente no sabria como usar en ciclo en ese caso, ya me puse a pensar y no puedo
  #6 (permalink)  
Antiguo 16/06/2005, 17:37
 
Fecha de Ingreso: enero-2004
Ubicación: Salto
Mensajes: 484
Antigüedad: 13 años, 11 meses
Puntos: 2
Código PHP:
<?php
$a 
= array('0','1','2','','','5','6');
foreach (
$a as $nombre=>$datos)
                {
                    if (empty(
$datos))
                    {
                    unset(
$nombre);
                    }else{
                        echo 
"abajo es else<br>";
                        echo 
$nombre." => ".$datos."<br>";
                        echo 
"-------<br>";
                        }
                }
?>
Esto sería un ciclo q recorrería el array (en tu caso $_FILES) y destruye las q estan vacias y dejan las otras, puedes ver la forma de implementar esto a tu código.
saludos cuidate
__________________
Dios dira que esto no es justo, pero lo sera...
  #7 (permalink)  
Antiguo 16/06/2005, 21:07
 
Fecha de Ingreso: diciembre-2003
Ubicación: Campehce, Mexico
Mensajes: 325
Antigüedad: 14 años
Puntos: 0
Muchas gracias, solo que como implemento las variables para subir imagenes ahi, que torpe soy con esto jejeje.

Si no sería muchisisisisima molestia :$
  #8 (permalink)  
Antiguo 17/06/2005, 03:00
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 13 años, 4 meses
Puntos: 101
Pero y.... ¿qué haz hecho? ¿qué haz intentado??
http://www.forosdelweb.com/1095862-post.html
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #9 (permalink)  
Antiguo 17/06/2005, 14:59
 
Fecha de Ingreso: diciembre-2003
Ubicación: Campehce, Mexico
Mensajes: 325
Antigüedad: 14 años
Puntos: 0
Ok muchas gracias, ya le voy entendiendo, entonces sería:

Código PHP:
<?
$array 
count($_POST['archivo']);
foreach (
$array as $nombre=>$datos)
{
if (empty(
$datos))
{
unset(
$nombre);
}
else
{
echo 
"Agregado ...";
}
}
Me pregunta es que instrucciones pondria en el INSERT para agregar las imagenes a la bd.
Saludos y muchas gracias
  #10 (permalink)  
Antiguo 18/06/2005, 04:45
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 13 años, 4 meses
Puntos: 101
Pués nop....
En primera, si leiste el enlace que te dejé, menciono (ya al final ) que, el estar enviando archivos, no debes recojerlos con $_POST sino con $_FILES, y que está a su vez es una variable multidimencional (indices 'tmp_name', 'name', 'type', 'size')... supongo puedes usar $_POST solo para facilitarte una validación (if(!empty(...))) pero a la hora de recojer debes, forzosamente emplear $_FILES...

... en segundo término, con count() solo optienes un número... no puedes aplicarle un foreach() a un número... igual en el post que te dejé mencioné en qué casos se emplearía el count() y foreach() no es uno de ellos...

... si mencioné el count() es porque el problema original del tema era solo optener el número de elementos de la matriz... porque, muy astutamente, visitó la FAQ que trata sobre subir archivos multiples y solo necesitaba ese número para aplicarla... (deberías verla).

Ya en tu caso en concreto... y con tu query... tendrías primero que validar los campos subidos para agregar el dato a dicha query... Ve esto:
http://www.forosdelweb.com/showpost....64&postcount=6

Ahora. debo decir que personalmente no creo conveniente manejar datos en binario para lo que planteas... el hecho de tomar los datos, "construir" el archivo y mandarlo a imprimir significa un gasto de recursos. Lee el tutorial de Cluster al respecto... pero como gustes.. es solo comentario y en nada afecta el comportamiento del ciclo...

Y bueno.. además de toda la info que se te ha proporcionado (por medio de los enlaces y referencias --FAQ--... cuesta repetir las cosas textualmente), te dejo esto:
Código PHP:
<form action="<?=$_SERVER['PHP_SELF'?>" method="post" enctype="multipart/form-data">
  <input type="file" name="file[]"><br>
  <input type="file" name="file[]"><br>
  <input type="file" name="file[]"><br>
  <input type="submit" name="Submit" value="Enviar">
</form>
<?php
if(isset($_POST['Submit'])) {
    for(
$i=0$i<count($_FILES['file']['name']); $i++) {
        if(!empty(
$_FILES['file']['name'][$i])) {
            if (
is_uploaded_file($_FILES['file']['tmp_name'][$i])) {
                
$nombre"imagenes/".$_FILES['file']['name'][$i]; // Conserva su nombre original, se guarda en una carpeta imagenes
                
if(move_uploaded_file($_FILES['file']['tmp_name'][$i], $nombre)) {
                    
$campos[]= "campo".($i+1); // el +1 solo es para darle "un nombre bonito" :-D
                    
$values[]= "'$nombre'";
                }
            }
        } 
    }
    
$camposimplode(", "$campos);
        
$valuesimplode(", "$values);
    echo 
"INSERT INTO ($campos) VALUES ($values)";
}
?>
... debería servirte.. no lo he probado directamente.. solo he recojido lo dicho por los enlaces que te he dejado... creo en mi .. jejeje... si esto no funciona estaría mintiendo todo el tiempo

Espero ya puedas adaptarlo... es algo sencillo, solo lo básico... puede hacerse con while() y foreach() como dije... pero OJO que $_FILES es una matríz MULTIDIMENCIONAL (tres niveles) y con foreach() deberás hacer uno dentro de otro (ó tres si quieres hacerlo directamente desde $_FILES ...

Quitate de curiosidad y cambia el for() por esto:
Código PHP:
foreach($_FILES['file'] as $atributo => $matriz) {
      foreach(
$matriz as $indice => $valor)
            echo 
"$atributo => $indice => $valor<br>";

... creeque que si entiendes sobre matricez verás el potencial que tienen... Tu código se reduciría en gran medida lo cuál se traduce en una página de menoe peso y eficiencia en tu aplicación... el simple hecho de que el mismo script serviría para N campos... así podrías, con JavaScript dar una opción de "agregar una nueva foto" donde podrías no mostrar ningún campo y el usuario al clickear podría añadir cuantos archivos quisiese... que eso no signifique que no puedes poner límites... pero bueno, solo es información que te servirá si la estudias...

www.php.net/array
www.php.net/foreach

Saludos!
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
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.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:10.