Ver Mensaje Individual
  #1 (permalink)  
Antiguo 10/03/2008, 14:31
Avatar de estibaliz2006
estibaliz2006
 
Fecha de Ingreso: noviembre-2006
Mensajes: 439
Antigüedad: 17 años, 5 meses
Puntos: 1
No me actualiza la imagen subida

Hola a todos. A ver, tengo un formulario por el cual añado a una base de datos una serie de campos. la base de datos se llama 'productos' y tiene una tabla llamada 'articulos' donde existen un 'idarticulo', autonumerico; un 'producto', que recoge el nombre el artículo y un campo 'imagen' donde se guarda la ruta de la imagen subida a un directorio del servidor llamado 'Imagenes'. el formulario para subir los datos es este:

Código HTML:
<FORM ENCTYPE="multipart/form-data" METHOD="POST" ACTION="procesar.php" name="form" >

 <table >
    <tr>
      <td>Producto</td><td><input name="producto" type="text"></input></td>
</tr>
<tr><td>Imagen</td><td><input name="archivo" type="file"></input></td></tr>
<tr><td><input type="submit" value="enviar"></input></td></tr></table> 
Este formulario envia los datos a un archivo procesar.php que tiene lo siguiente:
Código PHP:
    if($_post['archivo']=""
   { 
      
$ruta="no imagen"   ;
      
$error=false;  
   } 
else 
   {  
        
$error=false
       if(
$_FILES['archivo']['name'])  
            {  
                
$local $_FILES['archivo']['name'];  
                
$remoto $_FILES['archivo']['tmp_name'];  
                
$extension explode("."$local);  
                
$n count($extension)-1;  
                
$miext = array('jpg''gif''png''tiff''jpeg');
                if(
in_array($extension[$n], $miext))  
                
                       {
                     
// La variable para la BD
                        
$ruta "../Imagenes/" $local;
                        
chmod("$ruta"0777);    
                        if(
is_uploaded_file($remoto)) 
                            { 
                                if(!
move_uploaded_file($remoto$ruta)) 
                                    { 
                                        
$error=true
                                    } 
                            } 
                        else 
                            { 
                                
$error=true
                            } 
                    } 
                else 
                    { 
                        
$error=true
                    } 
            } 
    } 
if(!
$error
    { 
    
$producto=$_POST[producto];
    
$archivo=$_POST['archivo'];    
    
    
mysql_query("INSERT INTO articulos(producto,imagen) VALUES('$nombre','$ruta'); 
    header("
Locationexito.php"); 
    } 
else 
    { 
        header("
Locationerror.php"); 
    }  
    } 
bien. ahora tengo una página para modificar los registros existentes en la tabla de tal modo que seleccionas mediante un id un registro y muestra el mismo formulario anterior pero con los datos de ese id, de ese registro tal que así:

Código PHP:
//conectamos con la base de datos
 $id=$_GET['id'];
include ("conectar.php");

      $sql = "SELECT * FROM articulos WHERE idarticulo='$id' ORDER BY idarticulo DESC";

      $result = mysql_query($sql) or die (mysql_error());  

      $datos = mysql_num_rows($result);    
      while($datos = mysql_fetch_array($result)) 
      
    {
<FORM ENCTYPE="multipart/form-data" METHOD="POST" ACTION="procesar2.php?id=<?= $datos['idarticulo'?>"  name="form" >

 <table >
    <tr>
      <td>Producto</td><td><input name="producto" value="<?= $datos['nombre'?>" type="text"></input></td>
</tr>
<tr><td>Imagen</td><td><input name="archivo" type="file"></input></td></tr>
<tr><td><input type="submit" value="enviar"></input></td></tr></table>
<?php }?>
Este me lleva a un archivo procesar2.php que tiene:
Código PHP:
$id=$_GET['id'];

       if(
$_FILES['archivo']['name'])  
            {  
                
$local $_FILES['archivo']['name'];  
                
$remoto $_FILES['archivo']['tmp_name'];  
                
$extension explode("."$local);  
                
$n count($extension)-1;  
                
$miext = array('jpg''gif''png''tiff''jpeg');
                if(
in_array($extension[$n], $miext))  
                
                       {
                     
// La variable para la BD
                        
$ruta "../Imagenes/" $local;
                        
chmod("$ruta"0777);    
                        if(
is_uploaded_file($remoto)) 
                            { 
                                if(!
move_uploaded_file($remoto$ruta)) 
                                    { 
                                        
$error=true
                                    } 
                            } 
                        else 
                            { 
                                
$error=true
                            } 
                    } 
                else 
                    { 
                        
$error=true
                    } 
            } 
    } 
if(!
$error
    { 
    
    
    
    
$nombre=$_POST[nombre];
    
$archivo=$_POST[archivo];
    
    
    
     if(
$sql mysql_query("SELECT idarticulo FROM articulos WHERE idarticulo = $id")) { 
    
$num mysql_num_rows($sql); 
    if(
$num 0) { 
    
mysql_query("UPDATE articulos SET imagen='$ruta',nombre='$nombre' WHERE idarticulo='$id'",$link) or die(mysql_error()); 

    
header("Location: exito.php"); 
    } 
else 
    { 
        
header("Location: error.php"); 
    }}  
     else { 
    echo 
'Error en la consulta: '.mysql_error(); 
}} 
Bien. La historia está en que si yo en el formulario modificar modifico la imagen seleccionando una nueva, se actualiza correctamente. Pero si por ejemplo yo no quiero modificar la imagen, si no que solamente quiero actualizar el nombre del producto, repito, sin modificar la imagen (con lo cual el campo de la imagen irá vacío), el script lo que hace es borrarme de la base de datos la ruta del producto en cuestión pues al ir vacío, lo borra lo que hay.

Lo que yo quiero es:

1) Si meto una imagen nueva, que efectivamente se actualice con esa imagen nueva (eso ya lo hace ahora)
2) Si yo no modifico para nada la imagen (el input de la imagen va vacío) que no me modifique nada en la ruta de ese registro, de ese producto, en la base de datos.
3) Si metiera una imagen nueva, que se actualice (ahora mismo eso si lo hace repito) y que además elimine del directorio Imagenes la imagen que ha sobreescrito, es decir, la imagen de origen o antigua.

Podéis ayudarme? qué hago mal?
gracias a todos