• Domingo 22 de Diciembre de 2024, 20:33

Autor Tema:  Uso De Type=file  (Leído 1446 veces)

ross_mf

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Uso De Type=file
« en: Sábado 10 de Marzo de 2007, 16:59 »
0
:unsure: Hola..... no se si me pueden ayudar con el siguiente problema:
No puedo hacer que se almacene en una base de datos un archivo cualquiera, para dejarme entender mejor les muestro segmentos del codigo que he realizado:
CODE: del formulario
<form action="AReg_nuevo.php" method="post" enctype="multipart/form-data">
.............
........
<input name='userfile' type=file class="campo">
<textarea name="txtdesc" cols="30" rows="3" class="campo">Ninguna</textarea>
........
.........
</form>

CODE: de "AReg_nuevo.php"
...........
........
if ( !empty ($userfile) )   
{    $nombre = $_FILES["userfile"]["name"];
   $extensiones = array("jpg","jpeg","gif","png","bmp","ico");
   $var = explode(".","$nombre");
   $num = count($extensiones);
   $valor = $num-1;
   $admitido = false;
   for($i=0; $i<=$valor; $i++)
   {     if($extensiones[$i] == $var[1])
      {   $admitido=true;//es una extension valida
             break;
       }
   }
   if (!(empty($admitido))){
      echo "<meta http-equiv=\"refresh\" content=\"2; URL=AReg_nuevo0.php?cod=$cod&miembro=$miembro\">
      <span class='t_fecha'>No especificaste una imagen válida ( jpg, jpeg, gif, bmp, png, ico). Elija una imagen.</span> ";
      exit();
   }
   $data = "";
   $redir = "<meta http-equiv=\"refresh\" content=\"2; URL=AReg_nuevo0.php?cod=$cod&miembro=$miembro\">ERROR EN ALMACENAMIEMTO: INTENTE DE NUEVO";
   //recoger algunos datos para almecenarlos
   $userfile = $_FILES['userfile']['tmp_name'];
   $tamano=$_FILES["userfile"]["size"];
   if ($tamano==0){
      print "El tamaño de la imagen es 0 <br>". $redir;
      exit();
   }
   $tipo=$_FILES["userfile"]["type"];
   $descripcion=$_REQUEST["txtdesc"];
   //abrir el archivo y guardarlo en $fp= file pointer
   $fp = fopen($userfile, "rb");
   while(!feof($fp))
   {
      $data .= fread($fp, 1024);
   }
   fclose($fp);

   $data = addslashes($data);
   $data = addcslashes($data, "\0");
       ............
       ........
require '../db_connect.php';
   $sql = "INSERT INTO `fotos` (Cod_Ing,Tamano_img,Nombre_img,Tipo_img,Imagen,Descripcion_img)
   VALUES ('".$cod."','".$tamano."','".$nombre."','".$tipo."','".$data."','".$descripcion."')";
   $res=mysql_query($sql)or die (print $redir. mysql_error());
   $id=mysql_insert_id();
require '../db_dconnect.php';
       ........
       ............
       print "<img src='printimage.php?id=". $id. "' border='0' class=foto>";
}
........
...........

//************************
Y bueno, el problema es que en "AReg_nuevo.php" el valor de $userfile es siempre nulo (lo que no sucede con las demás variables), aclaro de que estoy utilizando:
extract($_POST,EXTR_SKIP);
aunque he realizado pruebas tambien con:
$userfile = trim($_POST['userfile']);
Por último:
En lo segmentos que falta estoy utilizando otros componentes de formularios para leer datos personales como nombre, direccion, fono, etc.
Estos valores pasan normalmente a "AReg_nuevo.php"  y se almacenan en una base de datos, pero no sucede lo mismo con el componente de tipo file.
NOTA: Funciona bien cuando trabajo en mi pc, pero no asi cuando lo subo a Internet.

RadicalEd

  • Moderador
  • ******
  • Mensajes: 2430
  • Nacionalidad: co
    • Ver Perfil
Re: Uso De Type=file
« Respuesta #1 en: Sábado 10 de Marzo de 2007, 17:38 »
0
Es mucho más facil si guardas la dirección del archivo en la DB, ganas menos espacio.

Te subo un ejemplo
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.
El pasado son solo recuerdos, el futuro son solo sueños

ross_mf

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Uso De Type=file
« Respuesta #2 en: Lunes 12 de Marzo de 2007, 23:27 »
0
Gracias por la ayuda, lo revise y en verdad lo manera de una manera facil...
Sin embargo revisando mi codigo lo arregle parcialmente primero puse la linea:
Código: Text
  1.  
  2. &#036;nombre = &#036;HTTP_POST_FILES[&#34;userfile&#34;][&#34;name&#34;];
  3.  
  4.  
antes de:
Código: Text
  1.  
  2. if ( !empty (&#036;nombre) )
  3.  
  4.  
   
y cambie $usefile, por $nombre.
con eso ingresa y almacena en mi base de datos.
Pero la funcion que uso para mostrar el archivo, no cumple su objetivo:
Código: Text
  1.  
  2. print &#34;&#60;img src='printimage.php?id=&#34;.&#036;id.&#34;' border='0'&#62;&#34;;
  3.  
  4.  
El codigo de printimage.php es:
Código: Text
  1.  
  2. require (&#34;../db_connect.php&#34;);
  3. &#036;MainSQL = &#34;SELECT Imagen,Tipo_img,Nombre_img FROM fotos where Num_img = '&#036;id'&#34;;
  4. &#036;res = mysql_query(&#036;MainSQL);
  5. &#036;row = mysql_fetch_array(&#036;res);
  6. &#036;data = &#036;row[0];
  7. &#036;tipo = &#036;row[1];
  8. &#036;name = &#036;row[2];
  9. header(&#34;Content-Type: &#34;.&#036;tipo.&#34;&#092;n&#34;);
  10. header(&#34;Content-Transfer-Encoding: binary&#092;n&#34;);
  11. header(&#34;Content-length: &#34;.strlen(&#036;data).&#34;&#092;n&#34;);
  12. header(&#34;Content-Disposition: attachment; filename=&#036;name&#34;);
  13. print &#036;data;
  14. require (&#34;../db_dconnect.php&#34;);
  15. exit;
  16.  
  17.  
No logro que muestre la imagen, aunque no sale ningun error de tipo cabezera,  pero es como sino encontrara la imagen.

Se agredece de antemano cualquier ayuda o sugerencia :comp:

Altareum

  • Miembro MUY activo
  • ***
  • Mensajes: 327
    • Ver Perfil
    • http://www.avian.com.ar
Re: Uso De Type=file
« Respuesta #3 en: Martes 13 de Marzo de 2007, 20:06 »
0
¿Por qué llamas dos veces a db_connect.php ? si dicho archivo tiene funciones, php te devuelve un error, ya que las funciones ya han sido definidas por la primer carga.
Además cuando usas require, en caso de que se genere un error el script se corta, como si usaras die(). Recomiendo que uses require_once, hace lo mismo, pero si un archivo ya fue incluido, no lo vuelve a incluir, y de esta forma, no se genera dicho error.


Altareum.
El postre!, el postre!, el postre!, el postre!, el postre!, el postre!.....
 | Klinka | Kiree | Avian |

ross_mf

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Uso De Type=file
« Respuesta #4 en: Lunes 19 de Marzo de 2007, 18:31 »
0
Hola....... :comp:
Bueno gracuas Alterum, efectivamente llamar  require ("../db_connect.php"); dentro de mi funcion printimage.php, estaba ocacionando el problema....
Sin embargo ya lo resolvi, asi que gracias a todos los que se tomaron el tiempo de leer el problema de uso de type=file.....