Foros del Web » Programando para Internet » PHP »

subir un archivo y guardar ruta en base de datos

Estas en el tema de subir un archivo y guardar ruta en base de datos en el foro de PHP en Foros del Web. hola a todos. miren queria ver si me pueden ayudar necesito subir un archivo de video, cosa que ya lo ago pero lo que me ...
  #1 (permalink)  
Antiguo 25/11/2007, 13:46
 
Fecha de Ingreso: noviembre-2007
Mensajes: 49
Antigüedad: 16 años, 5 meses
Puntos: 0
subir un archivo y guardar ruta en base de datos

hola a todos.

miren queria ver si me pueden ayudar necesito subir un archivo de video, cosa que ya lo ago pero lo que me falta es poder grabar la ruta donde queda guardado en mi base de datos alguien me puede mostrar como se hace eso porfoavor !!!

Muchas Gracias.
  #2 (permalink)  
Antiguo 25/11/2007, 14:03
okram
Invitado
 
Mensajes: n/a
Puntos:
Re: subir un archivo y guardar ruta en base de datos

Puedes poner el codigo con el que subes tu video?

Un saludo,
  #3 (permalink)  
Antiguo 25/11/2007, 14:27
 
Fecha de Ingreso: noviembre-2007
Mensajes: 49
Antigüedad: 16 años, 5 meses
Puntos: 0
Re: subir un archivo y guardar ruta en base de datos

Claro !!!



Este es el codigo.




Código PHP:
//Maximo tamaño en bytes
$MAX_SIZE 3000000000000;
                            
//Array con extensiones           
$FILE_EXTS  = array('.wmv'); 

//URL
$url =  "http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];

//Directorio de subida 
$upload_dir "archivos/";

if (!
is_dir($upload_dir)) {
  if (!
mkdir($upload_dir))
          die (
"El directorio no existe o no puede crearse");
  if (!
chmod($upload_dir,0777))
      die (
"Fallo el cambio de permisos a 0777.");
}

//Aca hacemos un log.txt con algunos datos como fecha e IP
if ($_FILES['userfile']) {
  
$archivo_log fopen("log.txt","a");
  
fwrite($archivo_log,date("Y.m.d h:i:s")." Subida - $_SERVER[REMOTE_ADDR] "
            
.$_FILES['userfile']['name']." "
            
.$_FILES['userfile']['type']."\n");
  
fclose ($archivo_log); 

  
$file_type $_FILES['userfile']['type']; 
  
$file_name $_FILES['userfile']['name'];
  
$file_ext strtolower(substr($file_name,strrpos($file_name,".")));

//Chequeo que los archivos no excedan el limite
  
if ( $_FILES['userfile']['size'] > $MAX_SIZE
     
$mensaje "El archivo debe pesar menos que 200KB.";
 
//Chequeo la extension
  
else if (!in_array($file_ext$FILE_EXTS))
     
$mensaje "Lo siento, archivos $file_ext no estan permitidos."
  else 
     
$mensaje do_upload($upload_dir$upload_url);
  
  print 
"<script>window.location.href='$url?mensaje=$mensaje'</script>";
}
else if (!
$_FILES['userfile']);
else 
    
$mensaje "Archivo invalido.";

//LISTA DE ARCHIVOS

$handle=opendir($upload_dir);
$filelist "";
while (
$file readdir($handle)) {
   if(!
is_dir($file) && !is_link($file)) {
      
$filelist .= "<a href='$upload_dir$file'>".$file."</a>";
      
$filelist .= "<sub><small><font color=grey>  ".date("d-m H:i"filemtime($upload_dir.$file))
                   .
"</font></small></sub>";
      
$filelist .="<br>";
   }
}

//Aca hacemos el upload
function do_upload($upload_dir$upload_url) {

    
$temp_name $_FILES['userfile']['tmp_name'];
    
$file_name $_FILES['userfile']['name']; 
    
//Aca reemplazo saco las comillas y barras de los nombres
  
$file_name str_replace("\\","",$file_name);
  
$file_name str_replace("'","",$file_name);

//Aca reemplazo los espacios del nombre por guion bajo
  
$file_name str_replace(" ","_",$file_name);
  
$file_path $upload_dir.$file_name;

//Chequeo el nombre del archivo
  
if ( $file_name =="") { 
      
$mensaje "Nombre invalido o vacio";
      return 
$mensaje;
  }

 
$resultado  =  move_uploaded_file($temp_name$file_path);
  if (!
chmod($file_path,0777))
       
$mensaje "Fallo el cambio de permisos a 0777.";
  else
    
$mensaje = ($resultado)?"$file_name subido con exito." :
               
"Hubo un error al subir el archivo.";
  return 
$mensaje;
}

?> 

Última edición por Albertair1; 25/11/2007 a las 14:40
  #4 (permalink)  
Antiguo 26/11/2007, 16:58
okram
Invitado
 
Mensajes: n/a
Puntos:
Re: subir un archivo y guardar ruta en base de datos

Para usar bases de datos primero debes de tener una. Luego, en tu script, debes conectarte a ella. Tu proveedor de hosting te debe haber dado todos los datos de acceso a tu base de datos...

Tienes alguna idea de MySQL?

Si sabes sobre bases de datos lo que necesitas es crear una tabla y hacer un INSERT:
Código PHP:
mysql_query("INSERT INTO tabla (path) VALUES ('$upload_dir')"); 
Si no conoces las bases de datos te recomiendo por buscar un buen manual+mysql

Un saludo,
  #5 (permalink)  
Antiguo 28/11/2007, 06:27
 
Fecha de Ingreso: noviembre-2007
Mensajes: 49
Antigüedad: 16 años, 5 meses
Puntos: 0
Re: subir un archivo y guardar ruta en base de datos

okram.

muchas gracias por reponderme y si tengo base de datos y tambien se como manejarla no soy un profesional en ella pero se lo basico.....

bueno probare cualquier cosa espero poder consultarte !!!

Última edición por Albertair1; 28/11/2007 a las 06:57
  #6 (permalink)  
Antiguo 28/11/2007, 18:55
 
Fecha de Ingreso: noviembre-2007
Mensajes: 49
Antigüedad: 16 años, 5 meses
Puntos: 0
Re: subir un archivo y guardar ruta en base de datos

Okram.

Me Sirvio, me funciono a la perfeccion con lo que me dijiste claro que te falto al pusiste esto.

Código PHP:
mysql_query("INSERT INTO tabla (path) VALUES ('$upload_dir')"); 
y era asi

Código PHP:
mysql_query("INSERT INTO tabla (path) VALUES ('$upload_dir$file_name')"); 
pero bueno ahora mira me pasa lo siguiente este es el codigo que uso
  #7 (permalink)  
Antiguo 28/11/2007, 18:57
 
Fecha de Ingreso: noviembre-2007
Mensajes: 49
Antigüedad: 16 años, 5 meses
Puntos: 0
Re: subir un archivo y guardar ruta en base de datos

Código PHP:
<?php
// technocurve arc 3 php mv block1/3 start
$mocolor1 "#000066";
$mocolor2 "#0000CC";
$mocolor3 "#0033FF";
$mocolor $mocolor1;
// technocurve arc 3 php mv block1/3 end
?>
<?php 
require_once('Connections/ldp.php'); ?>
<?php
function GetSQLValueString($theValue$theType$theDefinedValue ""$theNotDefinedValue ""
{
  
$theValue = (!get_magic_quotes_gpc()) ? addslashes($theValue) : $theValue;

  switch (
$theType) {
    case 
"text":
      
$theValue = ($theValue != "") ? "'" $theValue "'" "NULL";
      break;    
    case 
"long":
    case 
"int":
      
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case 
"double":
      
$theValue = ($theValue != "") ? "'" doubleval($theValue) . "'" "NULL";
      break;
    case 
"date":
      
$theValue = ($theValue != "") ? "'" $theValue "'" "NULL";
      break;
    case 
"defined":
      
$theValue = ($theValue != "") ? $theDefinedValue $theNotDefinedValue;
      break;
  }
  return 
$theValue;
}

$editFormAction $_SERVER['PHP_SELF'];
if (isset(
$_SERVER['QUERY_STRING'])) {
  
$editFormAction .= "?" htmlentities($_SERVER['QUERY_STRING']);
}

if ((isset(
$_POST["MM_insert"])) && ($_POST["MM_insert"] == "upload")) {
  
$insertSQL sprintf("INSERT INTO Mensajes (titulo, lugar, f, m, t) VALUES (%s, %s, %s, %s, %s)",
                       
GetSQLValueString($_POST['titulo'], "text"),
                       
GetSQLValueString($_POST['lugar'], "text"),
                       
GetSQLValueString($_POST['f'], "text"),
                       
GetSQLValueString($_POST['m'], "text"),
                       
GetSQLValueString($_POST['t'], "text"));

  
mysql_select_db($database_ldp$ldp);
  
$Result1 mysql_query($insertSQL$ldp) or die(mysql_error());
}

mysql_select_db($database_ldp$ldp);
$query_Mensajes "SELECT * FROM Mensajes";
$Mensajes mysql_query($query_Mensajes$ldp) or die(mysql_error());
$row_Mensajes mysql_fetch_assoc($Mensajes);
$totalRows_Mensajes mysql_num_rows($Mensajes);

//Maximo tamaño en bytes
$MAX_SIZE 3000000;
                            
//Array con extensiones           
$FILE_EXTS  = array('.zip','.jpg','.png','.gif','.rar'); 

//URL
$url =  "http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];

//Directorio de subida 
$upload_dir "archivos/";

if (!
is_dir($upload_dir)) {
  if (!
mkdir($upload_dir))
          die (
"El directorio no existe o no puede crearse");
  if (!
chmod($upload_dir,0777))
      die (
"Fallo el cambio de permisos a 0777.");
}

//Aca hacemos un log.txt con algunos datos como fecha e IP
if ($_FILES['userfile']) {
  
$archivo_log fopen("log.txt","a");
  
fwrite($archivo_log,date("Y.m.d h:i:s")." Subida - $_SERVER[REMOTE_ADDR] "
            
.$_FILES['userfile']['name']." "
            
.$_FILES['userfile']['type']."\n");
  
fclose ($archivo_log); 

  
$file_type $_FILES['userfile']['type']; 
  
$file_name $_FILES['userfile']['name'];
  
$file_ext strtolower(substr($file_name,strrpos($file_name,".")));

//Chequeo que los archivos no excedan el limite
  
if ( $_FILES['userfile']['size'] > $MAX_SIZE
     
$mensaje "El archivo debe pesar menos que 200KB.";
 
//Chequeo la extension
  
else if (!in_array($file_ext$FILE_EXTS))
     
$mensaje "Lo siento, archivos $file_ext no estan permitidos."
  else 
     
$mensaje do_upload($upload_dir$upload_url);
  
  print 
"<script>window.location.href='$url?mensaje=$mensaje'</script>";
}
else if (!
$_FILES['userfile']);
else 
    
$mensaje "Archivo invalido.";

//LISTA DE ARCHIVOS

$handle=opendir($upload_dir);
$filelist "";
while (
$file readdir($handle)) {
   if(!
is_dir($file) && !is_link($file)) {
      
$filelist .= "<a href='$upload_dir$file'>".$file."</a>";
      
$filelist .= "<sub><small><font color=grey>  ".date("d-m H:i"filemtime($upload_dir.$file))
                   .
"</font></small></sub>";
      
$filelist .="<br>";
   }
}

//Aca hacemos el upload
function do_upload($upload_dir$upload_url) {

    
$temp_name $_FILES['userfile']['tmp_name'];
    
$file_name $_FILES['userfile']['name']; 
    
//aca subimos los datos a la bd
mysql_query("INSERT INTO Mensajes (link) VALUES ('$upload_dir$file_name')");    
    
//Aca reemplazo saco las comillas y barras de los nombres
  
$file_name str_replace("\\","",$file_name);
  
$file_name str_replace("'","",$file_name);

//Aca reemplazo los espacios del nombre por guion bajo
  
$file_name str_replace(" ","_",$file_name);
  
$file_path $upload_dir.$file_name;

//Chequeo el nombre del archivo
  
if ( $file_name =="") { 
      
$mensaje "Nombre invalido o vacio";
      return 
$mensaje;
  }

 
$resultado  =  move_uploaded_file($temp_name$file_path);
  if (!
chmod($file_path,0777))
       
$mensaje "Fallo el cambio de permisos a 0777.";
  else
    
$mensaje = ($resultado)?"$file_name subido con exito." :
               
"Hubo un error al subir el archivo.";
  return 
$mensaje;
}
?>
bueno falto pero solo hasta aqui me deja poner el codigo el foro
pero con eso me entenderas.
  #8 (permalink)  
Antiguo 28/11/2007, 18:57
 
Fecha de Ingreso: noviembre-2007
Mensajes: 49
Antigüedad: 16 años, 5 meses
Puntos: 0
Re: subir un archivo y guardar ruta en base de datos

y bueno como te dije me sube correctamente la ruta a la base de datos pero sabes, como te puedes dar cuenta tambien subo con campos de texto otras cosas a mi base de datos pero cuando lo ago me realiza algo raro porque es como que subiera dos cosas diferente y me quedan con id diferente y yo quiero que quede todo junto mira entra a http://chloprado.iespana.es/paneldecontrol.php ahi te daras cuenta lo que me sucede.

nota esta funcional sube una imgen y veras lo que pasa

desde ante mano muchas Gracias !!!
  #9 (permalink)  
Antiguo 28/11/2007, 19:10
okram
Invitado
 
Mensajes: n/a
Puntos:
Re: subir un archivo y guardar ruta en base de datos

Eso pasa porque estás haciendo dos INSERTs a la bd, por lo tanto por cada archivo que subes se generan dos filas. Podrias arreglarlo con un UPDATE o haciendo todo con la misma consulta INSERT. Puedes borrar esta linea:

Código PHP:
mysql_query("INSERT INTO Mensajes (link) VALUES ('$upload_dir$file_name')"); 
y donde haces tu consulta INSERT primera, puedes incluir los datos del archivo
Código PHP:
if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "upload")) { 
  
$insertSQL sprintf("INSERT INTO Mensajes (titulo, lugar, f, m, t, link) VALUES (%s, %s, %s, %s, %s, %s)"
                       
GetSQLValueString($_POST['titulo'], "text"), 
                       
GetSQLValueString($_POST['lugar'], "text"), 
                       
GetSQLValueString($_POST['f'], "text"), 
                       
GetSQLValueString($_POST['m'], "text"), 
                       
GetSQLValueString($_POST['t'], "text"), 
                       
GetSQLValueString($upload_dir.$file_name"text")); 

  
mysql_select_db($database_ldp$ldp); 
  
$Result1 mysql_query($insertSQL$ldp) or die(mysql_error()); 

Obviamente, entonces, tendrás que definir las variables %upload_dir y $file_name antes de hacer esa consulta... Lo mejor es que el upload de archivos entero lo hagas antes de insertar los datos a la BD.

Si tienes algún problema, continúa posteando...

Un saludo,
  #10 (permalink)  
Antiguo 28/11/2007, 19:23
 
Fecha de Ingreso: noviembre-2007
Mensajes: 49
Antigüedad: 16 años, 5 meses
Puntos: 0
Re: subir un archivo y guardar ruta en base de datos

Obviamente, entonces, tendrás que definir las variables %upload_dir y $file_name antes de hacer esa consulta <--------- como ago eso??

esta ves si que no entendi :(

explicame porfavor !!!
  #11 (permalink)  
Antiguo 28/11/2007, 19:27
okram
Invitado
 
Mensajes: n/a
Puntos:
Re: subir un archivo y guardar ruta en base de datos

Aunque se desordenará todo tu código, mueve todo este bloque:

Código PHP:
//Maximo tamaño en bytes 
$MAX_SIZE 3000000
                             
//Array con extensiones            
$FILE_EXTS  = array('.zip','.jpg','.png','.gif','.rar');  

//URL 
$url =  "http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']; 

//Directorio de subida  
$upload_dir "archivos/"

if (!
is_dir($upload_dir)) { 
  if (!
mkdir($upload_dir)) 
          die (
"El directorio no existe o no puede crearse"); 
  if (!
chmod($upload_dir,0777)) 
      die (
"Fallo el cambio de permisos a 0777."); 


//Aca hacemos un log.txt con algunos datos como fecha e IP 
if ($_FILES['userfile']) { 
  
$archivo_log fopen("log.txt","a"); 
  
fwrite($archivo_log,date("Y.m.d h:i:s")." Subida - $_SERVER[REMOTE_ADDR] " 
            
.$_FILES['userfile']['name']." " 
            
.$_FILES['userfile']['type']."\n"); 
  
fclose ($archivo_log);  

  
$file_type $_FILES['userfile']['type'];  
  
$file_name $_FILES['userfile']['name']; 
  
$file_ext strtolower(substr($file_name,strrpos($file_name,"."))); 

//Chequeo que los archivos no excedan el limite 
  
if ( $_FILES['userfile']['size'] > $MAX_SIZE)  
     
$mensaje "El archivo debe pesar menos que 200KB."
  
//Chequeo la extension 
  
else if (!in_array($file_ext$FILE_EXTS)) 
     
$mensaje "Lo siento, archivos $file_ext no estan permitidos.";  
  else  
     
$mensaje do_upload($upload_dir$upload_url); 
   
  print 
"<script>window.location.href='$url?mensaje=$mensaje'</script>"

else if (!
$_FILES['userfile']); 
else  
    
$mensaje "Archivo invalido."
a antes de realizar la consulta que te dije...

Es el problema de trabajar con DreamWeaver... Es más dificil alterar el codigo, pues comienza a mezclarse todo...

Un saludo,
  #12 (permalink)  
Antiguo 28/11/2007, 19:38
 
Fecha de Ingreso: noviembre-2007
Mensajes: 49
Antigüedad: 16 años, 5 meses
Puntos: 0
Re: subir un archivo y guardar ruta en base de datos

okram.

y no habra la posibilidad de embes de insertar las cosas trabajando con dreamweaver hacerlo como me dijiste tu.

con el mysql_query("INSERT INTO.......

por ejemplo yo ya lo ise con la ruta de el archivo que subo que denomino en mi base de datos link,,,,,, eso sube bien no puedo hacer de esta misma forma subir
cuanto pesa el archivo y lo reconosca solo automaticamente al subir el archivo

o si no hacerlo yo mismo escribiendo en el campo de texto pero hacerlo con el codigo mysql_query("INSERT INTO....... en ves de hacerlo con el codigo
GetSQLValueString($_POST['t'], "text"));

espero haber sido claro esto es solo una duda y me gustaria que tu personal mente me dijieras que es mas conveniente.
  #13 (permalink)  
Antiguo 28/11/2007, 19:47
okram
Invitado
 
Mensajes: n/a
Puntos:
Re: subir un archivo y guardar ruta en base de datos

Ya te dije, detesto los códigos elaborados con DW. Sin embargo, no hay ventaja o desventaja en cuanto a rendimiento. DW tambien usa la sentencia INSERT, pero analiza los datos a incluir antes de armar la query (para eso es la función GetSQLValueString()).

Lo que yo te diría es "Borra el DW y empieza a trabajar con el Bloc de notas, o con un editor PHP (PHPDesigner es el que yo uso)".

Con DW también se arma una consulta INSERT común y corriente, que la almacena en la variable $insertSQL, pero usa la función sprintf() para incluir los datos a insertar dentro de la consulta. Todo eso es para evitar inyecciones SQL.

Para saber el tamaño del archivo, recuerda que está almacenado en la variable $_FILES['userfile']['size'], por lo tanto sólo debes crear un campo en tu tabla e insertar el dato de la misma manera:

Código PHP:
if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "upload")) { 
  
$insertSQL sprintf("INSERT INTO Mensajes (titulo, lugar, f, m, t, link, tamano) VALUES (%s, %s, %s, %s, %s, %s, ".$_FILES['userfile']['size'].")"
                       
GetSQLValueString($_POST['titulo'], "text"), 
                       
GetSQLValueString($_POST['lugar'], "text"), 
                       
GetSQLValueString($_POST['f'], "text"), 
                       
GetSQLValueString($_POST['m'], "text"), 
                       
GetSQLValueString($_POST['t'], "text"), 
                       
GetSQLValueString($upload_dir.$file_name"text")); 

  
mysql_select_db($database_ldp$ldp); 
  
$Result1 mysql_query($insertSQL$ldp) or die(mysql_error()); 

Un saludo,

Pd.: No se escribe "embes"
  #14 (permalink)  
Antiguo 28/11/2007, 19:55
 
Fecha de Ingreso: noviembre-2007
Mensajes: 49
Antigüedad: 16 años, 5 meses
Puntos: 0
Re: subir un archivo y guardar ruta en base de datos

Pd.: No se escribe "embes"


jajajaja toda la razon se me paso estoy concentrado en esto

pero Gracias
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 18:20.