PHP - No me actualiza la imagen

 
Vista:

No me actualiza la imagen

Publicado por estibaliz2006 (4 intervenciones) el 11/03/2008 21:27:10
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("Location: exito.php");
}
else
{
header("Location: error.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
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:No me actualiza la imagen

Publicado por Omar Yépez (224 intervenciones) el 11/03/2008 21:52:44
Hola estibaliz2006 estibaliz2006-at-yahoo-punto-es

Bueno analizar lo que estas haciendo mal en PHP es bastante complicado decirte....

Lo que si estas haciendo mal a primera vista es el modelo de datos de tu aplicacion. Claro esta, tu trabajas como sea mas comodo para ti pero yo haria una tabla solo para las imagenes de los productos, hija de la tabla productos relacionada con el id producto asi cuando quieras modificar algo del producto modificas la tabla producto y si quieres modificar la imagen modificas la tabla imagen_producto por llamarla de algun modo.

Esa seria la mejor forma de trabajar.....................
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar