Foros del Web » Programando para Internet » PHP »

Almacenar ruta

Estas en el tema de Almacenar ruta en el foro de PHP en Foros del Web. Hola a todos! Necesito que por favor me aclaren un poco el panorama, tengo una base en la cual inserté imágenes, pero leyendo el tutorial ...
  #1 (permalink)  
Antiguo 05/03/2005, 17:07
 
Fecha de Ingreso: agosto-2003
Mensajes: 524
Antigüedad: 14 años, 4 meses
Puntos: 5
Almacenar ruta

Hola a todos!

Necesito que por favor me aclaren un poco el panorama, tengo una base en la cual inserté imágenes, pero leyendo el tutorial de Cluster sobre este tema, entiendo que es preferible en lugar de almacenar las imágenes almacenar la ruta por una cuestión de espacio, cosa que me parece muy acertada.
El tema es que he intentado hacerlo sin buenos resultados y terminé enredándome un poco.

Aquí les paso el código que tengo, me podrían explicar como hago para almacenar la ruta y no la imagen dentro de la BD??? al crear la tabla los archivos de imagen (archivo_binario, archivo_nombre, etc) irian??? - Disculpen pero a estas alturas terminé confundiendo conceptos, espero me puedan ayudar.

Muchas gracias de todas maneras!!!

Código PHP:
<?php 

if (empty($_FILES['archivo']['name'])){ 
header("location: alta.php?proceso=falta_indicar_fichero"); 
exit; 
}

$Host "localhost";
$User "";
$Password "";
$Base "empresa";
$Tabla "productos";

$Link mysql_connect ($Host$User$Password);

$binario_nombre_temporal=$_FILES['archivo']['tmp_name'] ; 

$binario_contenido addslashes(fread(fopen($binario_nombre_temporal"rb"), filesize($binario_nombre_temporal))); 

$binario_nombre=$_FILES['archivo']['name']; 
$binario_peso=$_FILES['archivo']['size']; 
$binario_tipo=$_FILES['archivo']['type']; 

$ruta 'Productos/imagenes' ;  // PROBE DE ESTA MANERA PERO NO FUNCIONA

move_uploaded_file $_FILES 'archivo' ][ 'tmp_name' ], $ruta '/' $_FILES 'archivo' ][ 'name' ]) ;

$Query "INSERT INTO productos (id, codigo, producto, precio, observaciones, ruta) VALUES ('', '$codigo', '$producto', '$precio', '$observaciones', '$ruta')";

    
?>
__________________
Saludos!!!
Maru.-
  #2 (permalink)  
Antiguo 07/03/2005, 07:01
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Aquí tienes tu ruta y nombre temporal que PHP le dá a tu imagen al subir por HTTP (vía PHP y formulario HTML con su campo file):

$binario_nombre_temporal=$_FILES['archivo']['tmp_name'] ;

En tu BD .. deberías guardar sólo tu nombre del archivo .. no la ruta .. la clasificación de tu archivo (categoría?) lo debería dar la estructura de tu BD y modelo de datos .. Así, migraciones a otros servidores no son tan "drásticas" .. pero si quieres almancernar tu ruta y nombre de archivo .. OK como tu veas.

Cita:
$binario_contenido = addslashes(fread(fopen($binario_nombre_temporal, "rb"), filesize($binario_nombre_temporal)));

$binario_nombre=$_FILES['archivo']['name'];
$binario_peso=$_FILES['archivo']['size'];
$binario_tipo=$_FILES['archivo']['type'];
De todo eso te puedes deshacer .. no lo usas.

Si dices que "no te funciona" .. deberías indicar el problema o mensaje de erro exacto.

Por si acaso .. podrías usar:
$ruta = './Productos/imagenes' ;

Y confirma bien que esas mayusculas y minusculas que usas para el nombre de tu ruta sea correcto e igual.



Un saludo,
  #3 (permalink)  
Antiguo 08/03/2005, 13:23
 
Fecha de Ingreso: agosto-2003
Mensajes: 524
Antigüedad: 14 años, 4 meses
Puntos: 5
Hola CLUSTER!!! gracias por responder...
A ver, ahora lo intenté así:

Código PHP:
<?php 

$Host 
"localhost";
$User "";
$Password "";
$Base "empresa";
$Tabla "productos";


$Link mysql_connect ($Host$User$Password);

$db mysql_select_db($Base);

$binario_nombre_temporal $_FILES['archivo']['temp'];
$binario_nombre $_FILES['archivo']['name'];
$binario_punto strpos("."$binario_nombre);
$binario_extension substr($binario_nombre$binario_punto+1);

$binario_nuevo $id.".".$binario_extension;

$ruta =$_SERVER['DOCUMENT_ROOT']. '/Productos/imagenes'

move_uploaded_file ($binario_nombre_temporal$ruta."/".$binario_nuevo);

$Query "INSERT INTO inmobiliarias (id, codigo, producto, precio, imagen) VALUES ('', '$codigo', '$producto', '$precio', '$binario_nuevo')";
?>

// .... Luego para visualizar el registro haría lo siguiente:


<?php     

if (mysql_db_query ($Base$Query$Link))
    {
    
mysql_connect("localhost","","") or die ("no se ha podido conectar a la BD"); 

        
mysql_select_db("empresa") or die ("no se ha podido seleccionar la BD"); 

    
$sql "SELECT * FROM productos ORDER BY 'id' DESC LIMIT 0 , 1";
    
$consulta mysql_query($sql) or die ("No se pudo ejecutar la consulta"); 

    while (
$registro=mysql_fetch_array($consulta)){   
        echo 
"<table> \n";
        echo 
"<tr> \n";
        echo 
"<td>Código:</td> \n";
        echo 
"<td >".$registro['codigo']."</td>"
        echo 
"</tr> \n";
        echo 
"<td>Producto:</td> \n";
        echo 
"<td>".$registro['producto']."</td>";         
        echo 
"</tr> \n";
        echo 
"<td>Precio</td> \n";    
        echo 
"<td>".$registro['precio']."</td>"
        echo 
"</tr> \n";    
        echo 
"</table> \n";

// Para la imágen como puedo hacer???         

       
}
     }       
else
    {
     echo 
"<p>La operación no pudo ser realizada<p> \n";
     echo 
"<p><a href=alta.php target=_parent>Volver</a></p> \n"
    }
    
//cierra la base
mysql_close ($Link);
?>
</body>
</html>

Una cosa, cuando selecciono la imagen a insertar de cualquier carpeta, no la transporta a Productos/imagenes, que estoy haciendo mal???

Bueno por ahora es todo, espero que puedas darme una mano y GRACIAS por todas las veces que me haz ayudado!!!
__________________
Saludos!!!
Maru.-
  #4 (permalink)  
Antiguo 08/03/2005, 13:47
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
La función move_uploaded_file() no crea directorios, si necesitas crearlos (por qué no existan) debes usar la función mkdir() y establecer los permisos necesarios (tal vez con ayuda también de umask() por si quieres acceder el archivo que subes con otros usuarios .. no sólo el que usa PHP .. tal vez con el que usas para FTP).

Y .. esto:
$binario_nombre_temporal = $_FILES['archivo']['temp'];

no es correcto, sería:
$binario_nombre_temporal = $_FILES['archivo']['tmp_name'];

Un saludo,
  #5 (permalink)  
Antiguo 08/03/2005, 20:26
 
Fecha de Ingreso: agosto-2003
Mensajes: 524
Antigüedad: 14 años, 4 meses
Puntos: 5
Bien, voy a arreglar ese error.

Con el tema del directorio quizás me expliqué mal. Por ejemplo si yo tengo una imagen en Mis documentos y la selecciono desde ahi, para almacenarla en Productos/imagenes (q esta en el raiz) y ya lo tengo creado, la imagen no se traslada? o directamente tengo q tener las imagenes dentro de Productos/imagenes??? y buscarlas desde ahi para que se guarde el nombre dentro de la base???

Espero se entienda mi pregunta y gracias de nuevo!
__________________
Saludos!!!
Maru.-
  #6 (permalink)  
Antiguo 09/03/2005, 05:51
 
Fecha de Ingreso: agosto-2003
Mensajes: 524
Antigüedad: 14 años, 4 meses
Puntos: 5
Cluster! Cluster! vamos avanzando... parece que las imágenes no se trasladaban por el error en el archivo temporal que tenía, bueno ahora al menos si se puede... :o)
El tema es q sigo sin poder visualizarlas, me aparece el famoso cuadradito con la cruz roja, que puede estar sucediendo???
__________________
Saludos!!!
Maru.-
  #7 (permalink)  
Antiguo 09/03/2005, 07:18
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Iniciado por Maru77
Cluster! Cluster! vamos avanzando... parece que las imágenes no se trasladaban por el error en el archivo temporal que tenía, bueno ahora al menos si se puede... :o)
El tema es q sigo sin poder visualizarlas, me aparece el famoso cuadradito con la cruz roja, que puede estar sucediendo???
Pero .. ahora en tu BD tienes el registro del dato del nombre del archivo? .. y en tu directorio destino está tu archivo? ..

Cita:
Por ejemplo si yo tengo una imagen en Mis documentos y la selecciono desde ahi, para almacenarla en Productos/imagenes (q esta en el raiz) y ya lo tengo creado,
Piensa que trabajas en un entorno "cliente-servidor" .. olvidate de hablar de "Mis documentos" (en referencia a tu "cliente" ) y "productos/imagenes" en referencia a tu "servidor" ... El hecho es que en un "upload" .. el archivo "sube" (aunque tu uses el mismo PC como "cliente y servidor") vía HTTP .. ahí ya todo eso de "Mis documentos" y demás cara a PHP ya no existe .. ahora para PHP es desde donde quedó tu archivo al "subirlo" que lo define (upload_tmp_dir de tu php.ini) y como lo "moverá" dese ese sitio a su destino definitivo .. pues los archivos no se "suben" directamente a su destino .. sino a un sitio (directorio) temporal y compartido por todas tus aplicaciones que suban archivos, he de ahí que PHP "temporalmente" le ponga un nombre "aleatorio" a tu archivo subido pero también guarda el nombre origial que tenía el archivo (pero si te fijas no se guarda la ruta de origen de donde salió de ese "cliente" dicho archivo ..)

Un saludo,
  #8 (permalink)  
Antiguo 10/03/2005, 06:24
 
Fecha de Ingreso: agosto-2003
Mensajes: 524
Antigüedad: 14 años, 4 meses
Puntos: 5
Bueno Cluster, gracias por tus explicaciones, reacomodé algunas cosas del código, si me permitís te lo paso porque yo no le veo ningún error y sigo con el mismo problems, en lugar de imagen veo la crucecita roja.


Datos: utilizo Foxserv para trabajar con php - la carpeta Productos/imagenes la tengo en c:\foxserv\www

Pregunta: al generar la tabla el campo imagen lo tengo descripto como: imagen VARCHAR (50) NOT NULL default '',

<?php

//declaración de variables
$Host = "localhost";
$User = "";
$Password = "";
$Base = "empresa";
$Tabla = "productos";

//conecta la base
$Link = mysql_connect ($Host, $User, $Password);

$db = mysql_select_db($Base);

//Capturamos los datos del archivo adjunto (ruta temporal y extension del archivo)

$binario_nombre_temporal = $_FILES['archivo']['tmp_name'];
$binario_nombre = $_FILES['archivo']['name'];
$binario_punto = strpos($binario_nombre,".");
$binario_extension = substr($binario_nombre, $binario_punto+1);

//Acá tomo el id porque código no irá como campo - puede ser este el error???
//pero en todo caso es lo que no se repetiría, así que no se
$binario_nuevo = $id.".".$binario_extension;

//Guardaremos el archivo en la carpeta
$ruta =$_SERVER['DOCUMENT_ROOT'].'/Productos/imagenes';

move_uploaded_file ($binario_nombre_temporal, $ruta."/".$binario_nuevo);

//almacenamos el registro en la BD
$Query = "INSERT INTO productos (id, rubro, producto, precio, imagen) VALUES ('', '$rubro', '$producto', '$precio', '$imagen')";
?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Documento sin t&iacute;tulo</title>
<meta http-equiv="" content="text/html; charset=iso-8859-1">

</head>

<body>
<br>
<div><h1>Administración Base de Datos</h1>
<h2>Alta de Productos</h2>
</div>


<?php
//confirma si los datos fueron ingresados o no
if (mysql_db_query ($Base, $Query, $Link))
{
mysql_connect("localhost","","") or die ("no se ha podido conectar a la BD");

mysql_select_db("productos") or die ("no se ha podido seleccionar la BD");

$sql = "SELECT * FROM productos ORDER BY 'id' DESC LIMIT 0 , 1";
$consulta = mysql_query($sql) or die ("No se pudo ejecutar la consulta");

while ($registro=mysql_fetch_array($consulta)){
while ($registro=mysql_fetch_array($consulta)){
echo "<table> \n";
echo "<tr> \n";
echo "<td>Rubro:</td> \n";
echo "<td >".$registro['rubro']."</td>";
echo "</tr> \n";
echo "<td>Producto:</td> \n";
echo "<td>".$registro['producto']."</td>";
echo "</tr> \n";
echo "<td>Precio</td> \n";
echo "<td>".$registro['precio']."</td>";
echo "</tr> \n";
echo "<img src=\"./Productos/imagenes/".$registro['imagen']."\">";
echo "</table> \n";
echo "<br><br>";
echo "<p align='center'><a href=alta.php target=_parent>Volver</a></p> \n";
}
}
else
{
echo "<p>La operación no pudo ser realizada<p> \n";
echo "<p><a href=alta.php target=_parent>Volver</a></p> \n";
}

//cierra la base
mysql_close ($Link);
?>

</body>
</html>
__________________
Saludos!!!
Maru.-
  #9 (permalink)  
Antiguo 10/03/2005, 06:35
 
Fecha de Ingreso: marzo-2005
Mensajes: 163
Antigüedad: 12 años, 9 meses
Puntos: 0
Pareciera que estas almacenando en la base una variable $imagen que no tiene nada.Necesitarias guardar la ruta al archivo, la variable $ruta."/".$binario_nuevo.
Saludos
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 15:29.