Foros del Web » Programando para Internet » PHP »

que no me guarde el path de la imagen

Estas en el tema de que no me guarde el path de la imagen en el foro de PHP en Foros del Web. Hola, me encuentro que estoy intentando poder modificar el contenido de un campo que guarda el nombre del archivo subido al servidor a traves de ...
  #1 (permalink)  
Antiguo 20/12/2005, 18:47
Avatar de pereztroff  
Fecha de Ingreso: junio-2002
Ubicación: En la Internet.
Mensajes: 4.068
Antigüedad: 15 años, 6 meses
Puntos: 5
que no me guarde el path de la imagen

Hola, me encuentro que estoy intentando poder modificar el contenido de un campo que guarda el nombre del archivo subido al servidor a traves de un formulario. La idea consiste en que si uso la opcion modificar me aparezca un formulario para examinar una nueva imagen y subirla al servidor, pero claro antes de subir esta nueva imagen deberia borrar la antigua, y luego una vez subida esta nueva guardar el nombre del archivo en su campo correspondiente de la base de datos.

Lo estoy haciendo asi pero no me guarda el nombre de archivo correctamente en la base de datos ni me sube la foto nueva. En el campo que deberia guardar el nombre de archivo me guarda lo siguiente como ejemplo:
Código PHP:
C:/Documents%20and%20Settings/pereztroff/Escritorio/imagen.gif 
en lugar de guardar solo imagen.gif

El codigo que estoy usando es
Código PHP:
<?php
 $query 
mysql_query("select * from $tabla where id='$id'"); 
 
$row mysql_fetch_array($query); 

$carpeta='../fotos/';
if (
$row[$foto]!=""){
    @
unlink('../fotos/'.$row[$foto]); 
    
if(
$Submit) {
   if (
is_uploaded_file($HTTP_POST_FILES['foto']['tmp_name'])) {
     
move_uploaded_file($HTTP_POST_FILES['foto']['tmp_name'], $carpeta."/".$HTTP_POST_FILES['foto']['name']);
     
$subio true;
   }

if(
$subio) {
   echo 
"<br><br><br><font class='tex_negro'>La foto subio con exito</font><br>";
} else {
   echo 
"<br><br><br><font class='tex_negro'>No subio la foto </font><br>"
}

$foto = ($HTTP_POST_FILES['foto']['name']);
}
    }
Gracias.
  #2 (permalink)  
Antiguo 20/12/2005, 19:38
Avatar de Quest  
Fecha de Ingreso: diciembre-2002
Ubicación: Santiago
Mensajes: 129
Antigüedad: 15 años
Puntos: 2
Primero utiliza solo $_FILES
Y para lo segundo pasa la variable por la funcion basedir(), asi se elimina el path y deja solo el archivo.
__________________
http://victorsanmartin.com
Web Developer
http://www.guiasitios.cl
  #3 (permalink)  
Antiguo 21/12/2005, 03:33
Avatar de pereztroff  
Fecha de Ingreso: junio-2002
Ubicación: En la Internet.
Mensajes: 4.068
Antigüedad: 15 años, 6 meses
Puntos: 5
Cita:
Iniciado por Quest
Primero utiliza solo $_FILES
Y para lo segundo pasa la variable por la funcion basedir(), asi se elimina el path y deja solo el archivo.
Hola creo entender que use $FILES en lugar de $HTTP_POST_FILES????
Lo que no entiendo es como ese codigo me funciona correctamente para subir archivos cuando creo un nuevo registro pero en cambio cuando quiero modificar la imagen de ese registro como es el caso actual no funciona.

Sobre basedir no me quedo claro su uso ni encontre información, en cambio encontre otra funcion llamada basename ¿cual uso?


Gracias nuevamente
  #4 (permalink)  
Antiguo 21/12/2005, 04:24
 
Fecha de Ingreso: abril-2005
Mensajes: 139
Antigüedad: 12 años, 7 meses
Puntos: 1
Deberias poner todo el codigo incuido el del formulario. Ademas el codigo que has puesto como lo llamas o incluyes para dar el alta o para modificar?

En la base de datos guardas "$HTTP_POST_FILES['foto']['name']" o guardas "$HTTP_POST_FILES['foto']['temp']"?

Usas un update o borras el registro y creas uno nuevo?
Explicate un poquito mejor y sera mas facil ayudarte.
__________________
Ciao y suerte.
  #5 (permalink)  
Antiguo 21/12/2005, 05:44
Avatar de pereztroff  
Fecha de Ingreso: junio-2002
Ubicación: En la Internet.
Mensajes: 4.068
Antigüedad: 15 años, 6 meses
Puntos: 5
Cita:
Iniciado por Pleniluni0
Deberias poner todo el codigo incuido el del formulario. Ademas el codigo que has puesto como lo llamas o incluyes para dar el alta o para modificar?

En la base de datos guardas "$HTTP_POST_FILES['foto']['name']" o guardas "$HTTP_POST_FILES['foto']['temp']"?

Usas un update o borras el registro y creas uno nuevo?
Explicate un poquito mejor y sera mas facil ayudarte.
Vamos a ver si me explico, yo listo todos los registros del fichero de la base de datos, al clicar sobre uno de ellos me muestra en pantalla un formulario con los campos almacenados en ese registro, desde ahi puedo modificar cualquiera de ellos, pero en este caso basandome en el tema de las imagenes estas puede ser modificadas con un <input type="file" value="Enviar" name="foto"> del formulario. El formulario llama a otro archivo donde procesa el guardar los datos modificados en dicho registro, lo tengo asi:
<form action="edita1.php?id=<? echo($row[id]); ?>" method="post">


Se supone que desde el archivo edita.php que contiene el formulario de recogida de datos, este los pasa a edita1.php y ahi procesa o guarda en la base de datos los cambios.

Teoricamente en la base de datos debe guardarse el valor de $foto que contiene el resultado de $HTTP_POST_FILES['foto']['name']


El registro no lo borro para nada, solo que intento hacer un update del archivo que se supone que ha subido nuevamente la foto al directorio del servidor y ha borrado tambien la vieja.

¿me explico?
  #6 (permalink)  
Antiguo 21/12/2005, 06:04
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Te faltó poner el código donde efectivamente haces el INSERT o el UPDATE con el dato de:

$HTTP_POST_FILES['foto']['name']

A todo esto .. ya te han comentado que usando basename() te quedarías con el nombre del archivo de un path (ruta) data .. Pero como no indicas el código concreto que usas para hacer el "INSERT" o el UPDATE . .no se vé si por ahí "concatenas" alguna ruta con ese valor del "name" o que haces exactamente.

Un saludo,
  #7 (permalink)  
Antiguo 21/12/2005, 06:13
Avatar de pereztroff  
Fecha de Ingreso: junio-2002
Ubicación: En la Internet.
Mensajes: 4.068
Antigüedad: 15 años, 6 meses
Puntos: 5
La linea de codigo para update uso esta:

mysql_query("update $tabla set foto='$foto' where id='$id'");
  #8 (permalink)  
Antiguo 21/12/2005, 07:00
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Ok .. pero de donde salen los valores de esas variables $tabla .. o $foto?

Un saludo,
  #9 (permalink)  
Antiguo 21/12/2005, 07:36
Avatar de pereztroff  
Fecha de Ingreso: junio-2002
Ubicación: En la Internet.
Mensajes: 4.068
Antigüedad: 15 años, 6 meses
Puntos: 5
$tabla contiene el nombre de la tabla propiedamente, el valor de esta se encuentra en un archivo externo que mediante un include podemos tomar el valor de esa variable.

Sobre $foto deberia guardar el valor del input del formulario que toma dicho valor nuevo ¿no?
<input type="file" value="Enviar" name="foto">


Perdonadme pero hace tiempo que no trabajo con php.

Gracias nuevamente.
  #10 (permalink)  
Antiguo 21/12/2005, 08:16
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
NO .. tu $foto .. debería ser:

$foto=$_FILES['foto']['name'];

y si ves que ahí te aparece la ruta (cosa que no debería ocurrir) . .usa:

$foto=basename($_FILES['foto']['name']);

Un saludo,
  #11 (permalink)  
Antiguo 21/12/2005, 11:11
Avatar de pereztroff  
Fecha de Ingreso: junio-2002
Ubicación: En la Internet.
Mensajes: 4.068
Antigüedad: 15 años, 6 meses
Puntos: 5
Por fin ya pude guardar la modificacion y subir la nueva foto al servidor, lo que no se es porque no se borra la antigua foto ¿alguna idea?

Muchas gracias.
  #12 (permalink)  
Antiguo 21/12/2005, 11:21
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Pero tu haces algo por borrarla? (un unlink() ...) .. seguro que son de mismo nombre (cualquier diferencia entre mayusculas, minusculas .. etc hará diferente al archivo y por ende se creará uno nuevo).

Como -siempre- para darte más "ideas" es necesario que indiques QUE nombre de archivo subes y cual tenías . .Para eso ya te he comentado como averiguar lo que realmente está detectando PHP como nombre de archivo y así compararlo con lo que TU tengas en tu servidor ..

Un saludo,
  #13 (permalink)  
Antiguo 21/12/2005, 11:28
Avatar de pereztroff  
Fecha de Ingreso: junio-2002
Ubicación: En la Internet.
Mensajes: 4.068
Antigüedad: 15 años, 6 meses
Puntos: 5
Pues resumiendo un poco el tema, $row[foto] contiene el nombre correcto de archivo a eliminar e intento eliminarla asi:

$query = mysql_query("select * from $tabla where id='$id'");
$row = mysql_fetch_array($query);

if ($row[foto]!=""){
@unlink('../fotos/'.$row[$foto]);

}

Última edición por pereztroff; 21/12/2005 a las 12:01
  #14 (permalink)  
Antiguo 21/12/2005, 11:50
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cuando uno está en fase de desarrollo y tiene problemas .. lo que no puede hacer es usar @ delante de funciones .. así "ocultas" su posible error. Por ende iras perdido buscando el problema.

Quita ese @ y observa si tienes errores, con el error "textual" que obtengas veremos como solventarlo.

Pero .. a simple vista se vé:
@unlink('../fotos/'.$row[$foto]);

Quita ese $ de foto en $row[$foto]. Usa: $row['foto']
(no sé si lo copiastes tal cual lo tienes en tu código original o fué un fallo al colocar el código aquí .. )

Un saludo,
  #15 (permalink)  
Antiguo 21/12/2005, 12:00
Avatar de pereztroff  
Fecha de Ingreso: junio-2002
Ubicación: En la Internet.
Mensajes: 4.068
Antigüedad: 15 años, 6 meses
Puntos: 5
gracias Cluster eres un genio todo con tu ayuda es facil de asimilar, se me habia colado el $ ya funciona correctamente. muchas 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.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:16.